UTL_I18Nは、PL/SQLで作成されたアプリケーションに追加のグローバリゼーション機能を提供するサービスを集めたものです。
|
関連項目: 『Oracle Databaseグローバリゼーション・サポート・ガイド』 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
この項では、UTL_I18Nパッケージの使用に関連する項目について説明します。
UTL_I18N PL/SQLパッケージは、次のカテゴリのサービスで構成されています。
各種データ・タイプに対応した文字列変換ファンクション
テキスト文字列と文字参照の間で変換を実行するファンクション
Oracle、JavaおよびISOの各言語と各テリトリの間でマップするファンクション
Oracle、Internet Assigned Numbers Authority (IANA)および電子メールで安全なキャラクタ・セット間でマップするファンクション
Oracleの言語名からOracleのキャラクタ・セット名を戻すファンクション
Oracleキャラクタ・セットの文字の最大バイト数を戻すファンクション。
スクリプト変換を実行するファンクション
指定したテリトリでサポートされているISO通貨コード、ローカル・タイムゾーンおよびローカル言語を戻すファンクション
指定した言語でサポートされている最適な言語ソート、すべての適切な言語ソートのリストおよびローカル・テリトリを戻すファンクション
Oracleの完全言語名と短縮言語名の間でマップするファンクション
指定した言語およびテリトリ名の言語変換を戻すファンクション
最も一般的に使用されるタイムゾーンのリストを戻すファンクション
UTL_I18Nパッケージのファンクションは、データベースの内容の読取りも変更も行いません。これらのファンクションは、ファンクションの引数でのみ操作を行うか、またはNLSデータ・ファイルから静的な国際化情報を取得します(あるいはその両方を行います)。このパッケージの実行権限は、デフォルトでPUBLICに付与されます。
UTL_I18Nパッケージでは、表253-1に示す定数が使用されます。
表253-1 UTL_I18Nの定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
|
一般に使用するデフォルトのキャラクタ・セットを戻します。 |
|
|
|
|
Windows以外のプラットフォーム上で、Oracleのキャラクタ・セット名から電子メールで安全なキャラクタ・セット名にマップします。 |
|
|
|
|
Oracleのキャラクタ・セット名からIANAのキャラクタ・セット名にマップします。 |
|
|
|
|
|
|
|
|
|
IANAのキャラクタ・セット名からOracleのキャラクタ・セット名にマップします。 |
|
|
|
|
Oracleのキャラクタ・セット名と電子メールで安全なキャラクタ・セット名の間でマッピングが行われます。 |
|
|
|
|
Windowsプラットフォーム上で、Oracleのキャラクタ・セット名から電子メールで安全なキャラクタ・セット名にマップします。 |
|
|
|
|
|
|
|
|
|
全角カタカナのみを全角ひらがなに変換します。 |
|
|
|
|
全角カタカナのみを半角カタカナに変換します。 |
|
|
|
|
全角ひらがなのみを全角カタカナに変換します。 |
|
|
|
|
全角ひらがなのみを半角カタカナに変換します。 |
|
|
|
|
半角カタカナのみを全角カタカナに変換します。 |
|
|
|
|
半角カタカナのみを全角ひらがなに変換します。 |
|
|
|
|
すべてのタイプの仮名文字を全角カタカナに変換します。 |
|
|
|
|
すべてのタイプの仮名文字を全角ひらがなに変換します。 |
|
|
|
|
すべてのタイプの仮名文字を半角カタカナに変換します。 |
表253-2 UTL_I18Nパッケージのサブプログラム
| プロシージャ | 説明 |
|---|---|
|
|
指定したテキスト文字列をドキュメントのキャラクタ・セット以外の文字に対応する文字参照に変換します。 |
|
|
ロケールとは無関係な共通タイムゾーンIDのリストを戻します。 |
|
|
Oracleの言語名から、デフォルトのOracleのキャラクタ・セット名または電子メールで安全なデフォルトのキャラクタ・セット名を戻します。 |
|
GET_DEFAULT_ISO_CURRENCYファンクション |
指定したテリトリのデフォルトのISO 4217通貨コードを戻します。 |
|
GET_DEFAULT_LINGUISTIC_SORTファンクション |
指定した言語のデフォルトの言語ソート名を戻します。 |
|
|
指定したテリトリのローカル言語名を戻します。 |
|
GET_LOCAL_LINGUISTIC_SORTSファンクション |
指定した言語のローカル言語ソート名を戻します。 |
|
|
指定した言語のローカル・テリトリ名を戻します。 |
|
|
指定したテリトリのローカル・タイムゾーンIDを戻します。 |
|
|
指定されたキャラクタ・セットの最大文字サイズを戻します。 |
|
|
指定した変換言語の言語およびテリトリ名の変換を戻します。 |
|
|
|
|
MAP_FROM_SHORT_LANGUAGEファンクション |
Oracleの短縮言語名をOracleの言語名にマップします。 |
|
|
ISOのロケール名からOracleの言語名を戻します。 |
|
|
Oracleの言語名およびテリトリ名からISOのロケール名を戻します。 |
|
|
ISOのロケール名からOracleのテリトリ名を戻します。 |
|
|
Oracleの言語名をOracleの短縮言語名にマップします。 |
|
|
データベース・キャラクタ・セットにエンコードされていない |
|
|
各国語キャラクタ・セットにエンコードされていない |
|
|
|
|
|
日本語のひらがなとカタカナの変換を実行します。 |
|
|
文字参照を含む入力文字列をテキスト文字列に変換します。 |
このファンクションは、テキスト文字列を現行のドキュメントで使用されているキャラクタ・セット以外の文字に対応する文字参照に変換します。文字参照は、ドキュメントのエンコーディングとは無関係に文字を表すためにHTMLドキュメントおよびXMLドキュメントで主に使用されます。文字参照は、数値文字参照および文字エンティティ参照の2つの形式で表示できます。数値文字参照では文字のUnicodeコード・ポイント値を指定し、文字エンティティ参照では同じ文字を参照するために記号名を使用します。たとえば、åは上に丸の付いた小文字aを表す数値文字参照で、åは同じ文字の文字エンティティ参照です。また、文字エンティティ参照を使用して、< (より小)記号を表す<などの特殊文字をエスケープすることもできます。これによって、マークアップ言語のタグの開始で発生する可能性がある混同を回避します。
構文
UTL_I18N.ESCAPE_REFERENCE(
str IN VARCHAR2 CHARACTER SET ANY_CS,
page_cs_name IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2 CHARACTER SET str%CHARSET;
このファンクションは、最も一般的に使用されるタイムゾーンのリストを戻します。このリストには、データベースでサポートされているタイムゾーンのサブセットが示されます。
このファンクションは、Oracleの言語名から、デフォルトのOracleのキャラクタ・セット名またはデフォルトの電子メールで安全なキャラクタ・セット名を戻します。
構文
UTL_I18N.GET_DEFAULT_CHARSET( language IN VARCHAR2, context IN PLS_INTEGER DEFAULT GENERIC_CONTEXT, iswindows IN BOOLEAN DEFAULT FALSE) RETURN VARCHAR2;
パラメータ
表253-4 GET_DEFAULT_CHARSETファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
有効なOracle言語を指定します。 |
|
|
|
|
|
|
例
GENERIC_CONTEXT, iswindows=FALSE
UTL_I18N.GET_DEFAULT_CHARSET('French', UTL_I18N.GENERIC_CONTEXT, FALSE)
'WE8ISO8859P1'が戻されます。
MAIL_CONTEXT, iswindows=TRUE
UTL_I18N.GET_DEFAULT_CHARSET('French', UTL_I18N.MAIL_CONTEXT, TRUE)
'WE8MSWIN1252'が戻されます。
MAIL_CONTEXT, iswindows=FALSE
UTL_I18N.GET_DEFAULT_CHARSET('French', UTL_I18N.MAIL_CONTEXT, FALSE)
'WE8ISO8859P1'が戻されます。
このファンクションは、指定した言語の最も一般的に使用されるOracle言語ソート名を戻します。
構文
UTL_I18N.GET_DEFAULT_LINGUISTIC_SORT ( language IN VARCHAR2 CHARACTER SET ANY_CS) RETURN VARCHAR2;
このファンクションは、指定したテリトリのローカル言語名を戻します。
例
ベルギーで使用されているローカル言語のリストを戻します。
DECLARE
retval UTL_I18N.STRING_ARRAY;
cnt INTEGER;
BEGIN
retval := UTL_I18N.GET_LOCAL_LANGUAGES('BELGIUM');
DBMS_OUTPUT.PUT('Count = ');
DBMS_OUTPUT.PUT_LINE(retval.LAST);
cnt := retval.FIRST;
WHILE cnt IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(retval(cnt));
cnt := retval.NEXT(cnt);
END LOOP;
END;
/
...
Count = 2
DUTCH
FRENCH
このファンクションは、指定した言語に適したOracle言語ソート名のリストを戻します。BINARYソートはすべての言語に含まれています。
構文
UTL_I18N.GET_LOCAL_LINGUISTIC_SORTS ( language IN VARCHAR2 CHARACTER SET ANY_CS) RETURN STRING_ARRAY;
例
JAPANESEのローカル言語ソート名を表示します。
DECLARE
retval UTL_I18N.STRING_ARRAY;
cnt INTEGER;
BEGIN
retval := UTL_I18N.GET_LOCAL_LINGUISTIC_SORTS('Japanese');
DBMS_OUTPUT.PUT('Count = ');
DBMS_OUTPUT.PUT_LINE(retval.COUNT);
cnt := retval.FIRST;
WHILE cnt IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(retval(cnt));
cnt := retval.NEXT(cnt);
END LOOP;
END;
/
...
Count = 2
JAPANESE_M
BINARY
このファンクションは、指定した言語のローカル・テリトリ名を戻します。
例
ローカル言語の1つとしてドイツ語を使用するOracleテリトリのリストを戻します。
DECLARE
retval UTL_I18N.STRING_ARRAY;
cnt INTEGER;
BEGIN
retval := UTL_I18N.GET_LCOAL_TERRITORIIES('GERMAN');
DBMS_OUTPUT.PUT('Count = ');
DBMS_OUTPUT.PUT_LINE(retval.LAST);
cnt := retval.FIRST;
WHILE cnt IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(retval(cnt));
cnt := retval.NEXT(cnt));
END LOOP;
END;
/
...
Count = 4
GERMANY
AUSTRIA
LUXEMBOURG
SWITZERLAND
このファンクションは、指定したテリトリのローカル・タイムゾーンIDを戻します。
構文
UTL_I18N.GET_LOCAL_TIME_ZONES ( territory IN VARCHAR2 CHARACTER SET ANY_CS DEFAULT NULL) RETURN STRING_ARRAY;
例
テリトリAZERBAIJANでローカルに使用されているタイムゾーンのリストの後に一般的な共通タイムゾーンを戻すファンクションを作成します。このファンクションは、ユーザーのテリトリがわかっていて、アプリケーションでユーザーが他のタイムゾーンをユーザーのプリファレンスとして選択できる場合に有効です。
CREATE OR REPLACE FUNCTION get_time_zones
(territory IN VARCHAR2 CHARACTER SET ANY_CS)
RETURN utl_i18n.string_array
IS
retval utl_i18n.string_array;
retval2 utl_i18n.string_array;
stpos INTEGER;
BEGIN
retval := utl_i18n.get_local_time_zones(
territory);
retval2 := utl_i18n.get_common_time_zones;
stpos := retval.LAST + 1;
retval(stpos) := '-----'; -- a separator
FOR i IN retval2.FIRST..retval2.LAST LOOP
stpos := stpos + 1;
retval(stpos) := retval2(i);
END LOOP;
RETURN retval;
END;
/
AZERBAIJANのローカル・タイムゾーンが戻され、続いてセパレータ文字列である5つのダッシュ(-----)の下に共通タイムゾーンが戻されます。
DECLARE
retval UTL_I18N.STRING_ARRAY;
cnt INTEGER;
BEGIN
DBMS_OUTPUT.ENABLE(100000);
retval UTL_I18N.GET_TIME_ZONES('AZERBAIJAN');
cnt := retval.FIRST;
WHILE cnt IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(retval(cnt));
cnt := retval.NEXT(cnt);
END LOOP;
END;
/
Asia/Baku
-----
Pacific/Pago_Pago
Pacific/Honolulu
America/Anchorage
America/Vancouver
America/Los_Angeles
America/Tijuana
America/Edmonton
America/Denver
America/Phoenix
America/Mazatlan
America/Winnipeg
America/Regina
America/Chicago
America/Mexico_City
America/Guatemala
America/El_Salvador
America/Managua
America/Costa_Rica
America/Montreal
...
このファンクションは、指定されたキャラクタ・セットの最大文字サイズを戻します。
構文
UTL_I18N.GET_MAX_CHARACTER_SIZE(
charset_name IN VARCHAR2 CHARACTER SET ANY_CS)
RETURN PLS_INTEGER;
このファンクションは、指定した変換言語の言語およびテリトリ名の変換を戻します。
構文
UTL_I18N.GET_TRANSLATION ( parameter IN VARCHAR2 CHARACTER SET ANY_CS, trans_language IN VARCHAR2 'AMERICAN', flag IN PLS_INTEGER DEFAULT LANGUAGE_TRANS) RETURN VARCHAR2 CHARACTER SET parameter%CHARSET;
パラメータ
表253-12 GET_TRANSLATIONファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
有効な言語名、テリトリ名または |
|
|
変換言語名を指定します。たとえば、イタリア語の場合は |
|
|
変換タイプを指定します。
デフォルトの変換タイプは |
このファンクションは、次のマッピングを行います。
Oracleのキャラクタ・セット名からIANAのキャラクタ・セット名へのマッピング。
IANAのキャラクタ・セット名からOracleのキャラクタ・セット名へのマッピング。
Oracleのキャラクタ・セット名から電子メールで安全なキャラクタ・セット名へのマッピング。
構文
UTL_I18N.MAP_CHARSET( charset IN VARCHAR2, context IN PLS_INTEGER DEFAULT GENERIC_CONTEXT, flag IN PLS_INTEGER DEFAULT ORACLE_TO_IANA) RETURN VARCHAR2;
パラメータ
表253-13 MAP_CHARSETファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
マップするキャラクタ・セット名を指定します。マッピングでは大文字と小文字は区別されません。 |
|
|
|
|
|
|
使用上の注意
電子メールで安全なキャラクタ・セットとは、アプリケーションで電子メール・メッセージを送信するとき通常に使用されるOracleのキャラクタ・セットのことです。通常、このキャラクタ・セットは、データベース・キャラクタ・セットの内容を電子メールで安全な内容に変換するために使用されます。メール・ヘッダーにキャラクタ・セット名を指定するには、MAP_CHARSETファンクションにORACLE_TO_IANAオプションを指定してコールすることによって取得される、対応するIANAのキャラクタ・セット名を使用して、電子メールで安全なキャラクタ・セット名を入力として指定する必要があります。
たとえば、対応するIANA名がDEC-MCSであるWE8DECキャラクタ・セットのメッセージ内容を認識できる電子メール・クライアントは存在しません。WE8DECが、MAIL_CONTEXTオプションを指定したMAP_CHARSETファンクションに渡されると、ファンクションはWE8ISO8859P1を戻します。これに対応するIANA名であるISO-8859-1は、ほとんどの電子メール・クライアントで認識されます。
この例の手順は次のとおりです。
データベース・キャラクタ・セット名WE8DECをMAIL_CONTEXT | MAIL_GENERICオプションに指定して、MAP_CHARSETファンクションをコールします。この結果WE8ISO8859P1が戻されます。
データベースに格納されている内容を、WE8ISO8859P1に変換します。
電子メールで安全なキャラクタ・セットWE8ISO8859P1をORACLE_TO_IANA | GENERIC_CONTEXTオプションに指定して、MAP_CHARSETファンクションをコールします。この結果ISO-8859-1が戻されます。
電子メール・メッセージの送信時に、メール・ヘッダーにISO-8859-1を指定します。
一致するものが見つかると、ファンクションはキャラクタ・セット名を戻します。一致するものが見つからないか、フラグが無効の場合、ファンクションはNULLを戻します。
|
注意: Oracleのキャラクタ・セットの多くは、電子メールで安全な1つのキャラクタ・セットに対してマップできます。電子メールで安全なキャラクタ・セットをOracleのキャラクタ・セット名にマップするファンクションはありません。 |
例
一般的なコンテキスト
UTL_I18N.MAP_CHARSET('iso-8859-1',UTL_I18N.GENERIC_CONTEXT,UTL_I18N.IANA_TO_ORACLE)
'WE8ISO8859P1'が戻されます。
コンテキスト
UTL_I18N.MAP_CHARSET('WE8DEC', utl_i18n.mail_context, utl_i18n.mail_generic)
'WE8ISO8859P1'が戻されます。
|
関連項目: 有効なOracleのキャラクタ・セットのリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
このファンクションは、Oracleの短縮言語名をOracleの言語名にマップします。
例
IDが9000の顧客のデフォルトの言語ソート名を戻します。表customersは共通スキーマのoeユーザーから取得されます。顧客の言語プリファレンスは短縮言語名で格納されるため、GET_DEFAULT_LINGUISTIC_SORTプロシージャをコールして完全言語名に変換する必要があります。
DECLARE short_n VARCHAR2(10); ling_n VARCHAR2(50); BEGIN SELECT nls_language INTO short FROM customers WHERE customer_id = 9000; ling_n := UTL_I18N.GET_DEFAULT_LINGUISTIC_SORT ( UTL_I18N.MAP_FROM_SHORT_LANGUAGE(short_n)); DBMS_OUTPUT.PUT_LINE(ling_n); END; /
このファンクションは、ISOのロケール名からOracleの言語名を戻します。
このファンクションは、Oracleの言語名およびOracleのテリトリ名からISOのロケール名を戻します。有効な文字列には、少なくとも有効なOracleの言語名または有効なOracleのテリトリ名のいずれかが指定されている必要があります。
構文
UTL_I18N.MAP_LOCALE_TO_ISO ( ora_language IN VARCHAR2, ora_territory IN VARCHAR2) RETURN VARCHAR2;
このファンクションは、ISOのロケールからOracleのテリトリ名を戻します。
このファンクションは、有効なOracleのキャラクタ・セットのRAWデータを、データベース・キャラクタ・セットのVARCHAR2文字列に変換します。
このファンクションはオーバーロードされています。機能の各種形式は、構文宣言の箇所に併記してあります。
構文
バッファ変換:
UTL_I18N.RAW_TO_CHAR( data IN RAW, src_charset IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;
ピース単位の変換では、生データが1つずつ文字データに変換されます。
UTL_I18N.RAW_TO_CHAR ( data IN RAW, src_charset IN VARCHAR2 DEFAULT NULL, scanned_length OUT PLS_INTEGER, shift_status IN OUT PLS_INTEGER) RETURN VARCHAR2;
パラメータ
表253-19 RAW_TO_CHARファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
|
|
|
スキャンするソース・データのバイト数を指定します。 |
|
|
スキャン終了時のシフト状態を指定します。ピース単位の変換で初めてコールするときは、 注意: ISO 2022キャラクタ・セットでは、エンコード方法を示すためにシフト文字ではなくエスケープ・シーケンスが使用されます。 |
例
バッファ変換
UTL_I18N.RAW_TO_CHAR(hextoraw('616263646566C2AA'), 'utf8')
次の文字列がデータベース・キャラクタ・セットで戻されます。
'abcde'||chr(170)
ピース単位の変換
UTL_I18N.RAW_TO_CHAR(hextoraw('616263646566C2AA'),'utf8',shf,slen)
次の文字列がデータベース・キャラクタ・セットで戻されます。
'abcde'||chr(170)
さらに、shfがSHIFT_INに、slenが8に設定されます。
次の例では、インターネットからのデータを1つずつデータベース・キャラクタ・セットに変換します。
rvalue RAW(1050);
nvalue VARCHAR2(1024);
conversion_state PLS_INTEGER = 0;
converted_len PLS_INTEGER;
rtemp RAW(10) = '';
conn utl_tcp.connection;
tlen PLS_INTEGER;
...
conn := utl_tcp.open_connection ( remote_host => 'localhost',
remote_port => 2000);
LOOP
tlen := utl_tcp.read_raw(conn, rvalue, 1024);
rvalue := utl_raw.concat(rtemp, rvalue);
nvalue := utl_i18n.raw_to_char(rvalue, 'JA16SJIS', converted_len, conversion_stat);
if (converted_len < utl_raw.length(rvalue) )
then
rtemp := utl_raw.substr(rvalue, converted_len+1);
else
rtemp := '';
end if;
/* do anything you want with nvalue */
/* e.g htp.prn(nvalue); */
END LOOP;
utl_tcp.close_connection(conn);
EXCEPTION
WHEN utl_tcp.end_of_input THEN
utl_tcp.close_connection(conn);
END;
このファンクションは、有効なOracleのキャラクタ・セットのRAWデータを、各国語キャラクタ・セットのNVARCHAR2文字列に変換します。
このファンクションはオーバーロードされています。機能の各種形式は、構文宣言の箇所に併記してあります。
構文
バッファ変換:
UTL_I18N.RAW_TO_NCHAR ( data IN RAW, src_charset IN VARCHAR2 DEFAULT NULL) RETURN NVARCHAR2;
ピース単位の変換では、生データが1つずつ文字データに変換されます。
UTL_I18N.RAW_TO_NCHAR ( data IN RAW, src_charset IN VARCHAR2 DEFAULT NULL, scanned_length OUT PLS_INTEGER, shift_status IN OUT PLS_INTEGER) RETURN NVARCHAR2;
パラメータ
表253-20 RAW_TO_NCHARファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
|
|
|
|
|
|
スキャンするソース・データのバイト数を指定します。 |
|
|
スキャン終了時のシフト状態を指定します。ピース単位の変換で初めてコールするときは、 注意: ISO 2022キャラクタ・セットでは、エンコード方法を示すためにシフト文字ではなくエスケープ・シーケンスが使用されます。 |
例
バッファ変換
UTL_I18N.RAW_TO_NCHAR(hextoraw('616263646566C2AA'),'utf8')
次の文字列が各国語キャラクタ・セットで戻されます。
'abcde'||chr(170)
ピース単位の変換
UTL_I18N.RAW_TO_NCHAR(hextoraw('616263646566C2AA'),'utf8', shf, slen)
次の文字列が各国語キャラクタ・セットで戻されます。
'abcde'||chr(170)
さらに、shfがSHIFT_INに、slenが8に設定されます。
次の例では、インターネットからのデータを1つずつ各国語キャラクタ・セットに変換します。
rvalue RAW(1050);
nvalue NVARCHAR2(1024);
converstion_state PLS_INTEGER = 0;
converted_len PLS_INTEGER;
rtemp RAW(10) = '';
conn utl_tcp.connection;
tlen PLS_INTEGER;
...
conn := utl_tcp.open_connection ( remote_host => 'localhost',
remote_port => 2000);
LOOP
tlen := utl_tcp.read_raw(conn, rvalue, 1024);
rvalue := utl_raw.concat(rtemp, rvalue);
nvalue := utl_i18n.raw_to_nchar(rvalue, 'JA16SJIS', converted_len, conversion_stat);
if (converted_len < utl_raw.length(rvalue) )
then
rtemp := utl_raw.substr(rvalue, converted_len+1);
else
rtemp := '';
end if;
/* do anything you want with nvalue */
/* e.g htp.prn(nvalue); */
END LOOP;
utl_tcp.close_connection(conn);
EXCEPTION
WHEN utl_tcp.end_of_input THEN
utl_tcp.close_connection(conn);
END;
このファンクションは、VARCHAR2またはNVARCHAR2の文字列を別の有効なOracleのキャラクタ・セットに変換し、その結果をRAWデータとして戻します。
構文
UTL_I18N.STRING_TO_RAW( data IN VARCHAR2 CHARACTER SET ANY_CS, dst_charset IN VARCHAR2 DEFAULT NULL) RETURN RAW;
このファンクションは、スクリプト変換を実行します。このリリースでは、TRANSLITERATEファンクションは日本語の仮名変換のみをサポートします。
構文
UTL_I18N.TRANSLITERATE ( data IN VARCHAR2 CHARACTER SET ANY_CS, name IN VARCHAR2) RETURN VARCHAR2 CHARACTER SET data%CHARSET;
パラメータ
表253-22 TRANSLITERATEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変換するデータを指定します。 |
|
|
変換名文字列を指定します。有効な名前のリストについては、表253-23を参照してください。 |
定数
次のオプションは、日本語の仮名変換を指定します。
表253-23 TRANSLITERATEファンクションの定数
| 定数名 | 値 | 説明 |
|---|---|---|
|
|
|
すべてのタイプの仮名文字を全角カタカナに変換します。 |
|
|
|
すべてのタイプの仮名文字を半角カタカナに変換します。 |
|
|
|
すべてのタイプの仮名文字を全角ひらがなに変換します。 |
|
|
|
全角カタカナのみを半角カタカナに変換します。 |
|
|
|
全角カタカナのみを全角ひらがなに変換します。 |
|
|
|
半角カタカナのみを全角カタカナに変換します。 |
|
|
|
半角カタカナのみを全角ひらがなに変換します。 |
|
|
|
全角ひらがなのみを全角カタカナに変換します。 |
|
|
|
全角ひらがなのみを半角カタカナに変換します。 |
例
NVARCHAR2列enameを含む表japanese_empの場合は、次の文を使用して、enameのすべての仮名の名前をひらがなに正規化することができます。
UPDATE japanese_emp SET ename = UTL_I18N.TRANSLITERATE (ename, 'kana_hiragana');
次の図に、出力例を示します。
次の文は、1つの仮名の名前をひらがなに正規化します。
DECLARE
Name japanese_emp.ename%TYPE;
Eno CONSTANT NUMBER(4) := 1;
BEGIN
SELECT ename INTO name FROM japanese_emp WHERE enumber = eno;
name := UTL_I18N.TRANSLITERATE(name, UTL_I18N.KANA_HIRAGANA);
UPDATE japanese_emp SET ename = name WHERE enumber = eno;
EXCEPTION
WHEN UTL_I18N.UNSUPPORTED_TRANSLITERATION THEN
DBMS_OUTPUT.PUT_LINE('transliteration not supported');
END;
/