簡體   English   中英

如何在Oracle 11g中使用基於util_i18n的語言代碼列表創建表?

[英]How to create a table in Oracle 11g with the list of language codes based on util_i18n?

前幾天,我問如何在可能的情況下基於內置的oracle表生成貨幣列表: oracle是否提供內置的貨幣表供我用作約束?

現在,我需要一個語言代碼列表,因此我閱讀了util_i18n的文檔,並找到了一個名為GET_LOCAL_LANGUAGES的函數。 我嘗試將先前答案中的腳本改編為這個新問題,但失敗了。 這主要是因為我的oracle / sql Knowlegde很糟糕:

我嘗試改編的原件:

select utl_i18n.GET_DEFAULT_ISO_CURRENCY(value) iso_cur
from v$nls_valid_values
where parameter = 'TERRITORY'

我嘗試將其用於語言:

select utl_i18n.GET_LOCAL_LANGUAGES(value) lang_cur
from v$nls_valid_values
where parameter = 'TERRITORY'

我檢查了文檔,並且TERRITORY也是參數名稱,該部分不是猜測。 通過此查詢,我得到錯誤: invalid data type

我敢打賭這是一個菜鳥問題,但到目前為止我的所有嘗試都失敗了。

例如,您可以使用管道包裝器(原始函數返回程序包定義的集合類型):

SQL> create type t_lang_tab is table of varchar2(4000)
  2  /

SQL> create or replace function get_language(
  2   p_value in varchar2
  3  ) return t_lang_tab
  4  pipelined
  5  is
  6    res utl_i18n.string_array;
  7  begin
  8    res := utl_i18n.GET_LOCAL_LANGUAGES(p_value);
  9    if res is not null then
 10      for i in 1..res.count loop
 11        pipe row (substr(res(i),1,4000));
 12      end loop;
 13    end if;
 14    return;
 15  end;
 16  /

SQL> col column_value format a25
SQL> col value format a25
SQL> select t.column_value, p.value
  2  from v$nls_valid_values p,
  3  table(get_language(p.value)) t
  4  where parameter = 'TERRITORY'
  5  /

COLUMN_VALUE              VALUE                                                 
------------------------- -------------------------                             
ENGLISH                   AMERICA                                               
GERMAN DIN                GERMANY                                               
CANADIAN FRENCH           CANADA                                                
FRENCH                    CANADA                                                
CATALAN                   SPAIN                                                 
SWEDISH                   FINLAND                                               
PORTUGUESE                BRAZIL                                                
LATIN AMERICAN SPANISH    MEXICO                                                
SPANISH                   MEXICO                                                
SPANISH                   CATALONIA                                             
ARABIC                    EGYPT   
....

如果要創建語言表,可以執行以下操作:

SQL> CREATE TABLE languages (
  2    country VARCHAR2(30) NOT NULL,
  3    language VARCHAR2(30) NOT NULL,
  4    CONSTRAINT languages_pk PRIMARY KEY (country, language)
  5  )
  6  /

主鍵應為復合鍵,因為加拿大等多國語言國家。 現在您可以使用上面的函數來填充表格:

SQL> INSERT INTO languages
  2  select p.value, t.column_value
  3  from v$nls_valid_values p,
  4  table(get_language(p.value)) t
  5  where parameter = 'TERRITORY'
  6  order by 1
  7  /

SQL> commit;

SQL> select * from languages;

COUNTRY                        LANGUAGE                                         
------------------------------ ------------------------------                   
AMERICA                        ENGLISH                                          
ARGENTINA                      SPANISH                                          
BELARUS                        RUSSIAN                                          
BELGIUM                        FRENCH                                           
BRAZIL                         PORTUGUESE                                       
CANADA                         FRENCH                                           
CANADA                         CANADIAN FRENCH                                  
CATALONIA                      SPANISH                                          
CHILE                          SPANISH                                          
COLOMBIA                       SPANISH    
...  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM