Oracle Databaseでは、DECOMPOSE() 関数は、Unicode分解の1つを文字列引数に適用した結果を返します。分解は、2番目の(オプションの)引数によって決定されます。
COMPOSE()の反対です 機能。
構文
構文は次のようになります:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
ここで、両方の引数はCHARのいずれかになります。 、VARCHAR2 、NCHAR 、またはNVARCHAR2 データ型、またはVARCHAR2のいずれかに暗黙的に変換できる型 またはNVARCHAR2 。
(オプションの)2番目の引数について:
-
CANONICALUnicode標準定義D68で説明されているように、正規分解が発生し、NFD正規化形式で文字列が返されます。 COMPATIBILITYUnicode標準定義D65で説明されているように、互換性が分解され、NFKD正規化形式で文字列が返されます。
デフォルトの動作は、正規分解を適用することです。
例
次に例を示します:
SELECT DECOMPOSE('ã') FROM DUAL; 結果:
ã
ただし、次の例の方が優れたデモンストレーションです。
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL; 結果:
a\0303
ここでは、ASCIISTR()を使用しました DECOMPOSE()の結果のASCIIバージョンを返す データベースの文字セットで。
ASCIISTR()を使用するとどうなりますか DECOMPOSE()なし :
SELECT ASCIISTR('ã') FROM DUAL; 結果:
\00E3
非Unicode文字
引数の文字セットがUnicode文字セットのいずれでもない場合、引数は変更されずに返されます。
例:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL; 結果:
a
nullの場合 、結果はnullです : SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL; 結果:
null
デフォルトでは、SQLclおよびSQL * Plusは、SQL SELECTの結果としてnull値が発生するたびに空白を返します。 ステートメント。
ただし、SET NULLを使用できます 返される別の文字列を指定します。ここでは、文字列nullを指定しました 返却する必要があります。
DECOMPOSE()を呼び出す 引数がないとエラーが発生します:
SELECT DECOMPOSE()
FROM DUAL; 結果:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
また、あまりにも多くの引数を渡すと、エラーが発生します:
SELECT DECOMPOSE('a', 'b')
FROM DUAL; 結果:
Error report - ORA-12702: invalid NLS parameter string used in SQL function