Oracle
 sql >> Datenbank >  >> RDS >> Oracle

DECOMPOSE()-Funktion in Oracle

In der Oracle-Datenbank die DECOMPOSE() Die Funktion gibt das Ergebnis der Anwendung einer der Unicode-Zerlegungen auf ihr Zeichenfolgenargument zurück. Die Zerlegung wird durch das zweite (optionale) Argument bestimmt.

Es ist das Gegenteil von COMPOSE() Funktion.

Syntax

Die Syntax sieht so aus:

DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )

Wobei beide Argumente eines der CHAR sein können , VARCHAR2 , NCHAR , oder NVARCHAR2 Datentypen oder einen Typ, der implizit entweder in VARCHAR2 konvertiert werden kann oder NVARCHAR2 .

Zum (optionalen) zweiten Argument:

  • CANONICAL führt zu einer kanonischen Dekomposition, wie in der Unicode-Standarddefinition D68 beschrieben, und gibt eine Zeichenfolge in der NFD-Normalisierungsform zurück.
  • COMPATIBILITY führt zu einer Kompatibilitätszerlegung, wie in der Unicode-Standarddefinition D65 beschrieben, und gibt eine Zeichenfolge in der NFKD-Normalisierungsform zurück.

Das Standardverhalten ist die Anwendung der kanonischen Zerlegung.

Beispiel

Hier ist ein Beispiel:

SELECT DECOMPOSE('ã') FROM DUAL;

Ergebnis:

Das folgende Beispiel ist jedoch eine bessere Demonstration:

SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;

Ergebnis:

a\0303

Hier haben wir ASCIISTR() verwendet um eine ASCII-Version des Ergebnisses von DECOMPOSE() zurückzugeben im Datenbankzeichensatz.

Folgendes passiert, wenn wir ASCIISTR() verwenden ohne DECOMPOSE() :

SELECT ASCIISTR('ã') FROM DUAL;

Ergebnis:

\00E3

Nicht-Unicode-Zeichen

Wenn der Zeichensatz des Arguments keiner der Unicode-Zeichensätze ist, wird das Argument unverändert zurückgegeben.

Beispiel:

SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;

Ergebnis:

a

Null-Argument

Wenn das Argument null ist , ist das Ergebnis null :

SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;

Ergebnis:

null

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn als Ergebnis eines SQL-SELECT ein Nullwert auftritt Aussage.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Ungültige Argumentanzahl

Aufruf von DECOMPOSE() ohne Argumente führt zu einem Fehler:

SELECT DECOMPOSE()
FROM DUAL;

Ergebnis:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Und die Übergabe zu vieler Argumente führt ebenfalls zu einem Fehler:

SELECT DECOMPOSE('a', 'b')
FROM DUAL;

Ergebnis:

Error report -
ORA-12702: invalid NLS parameter string used in SQL function