例如,假设我们现在有一个国家的列表。其中国家名是依据最终用户的语言不同而不同。在当时没有翻译器的条件下,我们需要根据用户设置的语言来输出国家名,或是用默认的语言—英语来进行输出。
要达到这个目的,我们首先创建一个表格,用我们的基础语言来存储有关这些国家的信息,创建过程如下:
create table base_countries
(
a2 char(2) not
null,
a3 char(3) not
null,
num char(3) not null,
name varchar2(60) not null,
constraint base_countries_pk primary key (a2)
);
现在,我们创建了一个转化表格。通常情况下,这个转化表格只需要三个元素,他们是:表的主码,语言代码,以及译文。如果有多列需要转化的话,我们还可以加一个标识符来记载当前列位置。这也需要我们进行对基础表的引用,可参照以下代码:
create table tran_countries
(
a2 char(2) not
null,
lang varchar2(2) not null,
name varchar2(60) not null,
constraint tran_countries_pk primary key (a2,lang),
constraint tran_countries_fk foreign key (a2) references
base_countries (a2)
);
然后,我们可以用以下方法在基础表和转换表上用当前指定的语言代码来创建视图,其中的语言代码是在USERENV('LANG')中设置的,创建方法如下:
create or replace view nls_countries as
select base_countries.a2,
base_countries.a3,
base_countries.num,
nvl(tran_countries.name,base_countries.name)
name
from base_countries,tran_countries
where base_countries.a2 = tran_countries.a2
(+)
and userenv('LANG') = tran_countries.lang
(+);
或者,我们还可以用Oracle9i的外连接及语法来创建视图,方法如下:
create or replace view nls_countries as
select base_countries.a2,
base_countries.a3,
base_countries.num,
nvl(tran_countries.name,base_countries.name)
name
from base_countries left outer join tran_countries
on base_countries.a2 = tran_countries.a2
and tran_countries.lang = userenv('LANG');