沒有有關的標准化過程,程序開發者們想要開發一個能在多種語言環境下使用的應用程序是非常地困難的。如果可能的話,這些翻譯轉換過程能在數據庫中完成,那麼就給開發者們帶來了很多便利,使他們能專注於開發本身的事情了。
例如,假設我們現在有一個國家的列表。其中國家名是依據最終用戶的語言不同而不同。在當時沒有翻譯器的條件下,我們需要根據用戶設置的語言來輸出國家名,或是用默認的語言—英語來進行輸出。
要達到這個目的,我們首先創建一個表格,用我們的基礎語言來存儲有關這些國家的信息,創建過程如下:
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');