Oracle
 sql >> Database >  >> RDS >> Oracle

DECOMPOSE() Funzione in Oracle

In Oracle Database, il DECOMPOSE() La funzione restituisce il risultato dell'applicazione di una delle scomposizioni Unicode al relativo argomento stringa. La scomposizione è determinata dal secondo argomento (opzionale).

È l'opposto di COMPOSE() funzione.

Sintassi

La sintassi è questa:

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

Dove entrambi gli argomenti possono essere uno qualsiasi dei CHAR , VARCHAR2 , NCHAR o NVARCHAR2 tipi di dati o un tipo che può essere convertito in modo implicito in VARCHAR2 o NVARCHAR2 .

Per quanto riguarda il secondo argomento (facoltativo):

  • CANONICAL risulta in una scomposizione canonica, come descritto nella definizione Unicode Standard D68, e restituisce una stringa nel modulo di normalizzazione NFD.
  • COMPATIBILITY risulta in una scomposizione di compatibilità, come descritto nella definizione Unicode Standard D65, e restituisce una stringa nel modulo di normalizzazione NFKD.

Il comportamento predefinito consiste nell'applicare la scomposizione canonica.

Esempio

Ecco un esempio:

SELECT DECOMPOSE('ã') FROM DUAL;

Risultato:

Tuttavia, il seguente esempio è una dimostrazione migliore:

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

Risultato:

a\0303

Qui abbiamo usato ASCIISTR() per restituire una versione ASCII del risultato di DECOMPOSE() nel set di caratteri del database.

Ecco cosa succede se utilizziamo ASCIISTR() senza DECOMPOSE() :

SELECT ASCIISTR('ã') FROM DUAL;

Risultato:

\00E3

Caratteri non Unicode

Se il set di caratteri dell'argomento non è uno dei set di caratteri Unicode, l'argomento viene restituito non modificato.

Esempio:

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

Risultato:

a

Argomento nullo

Se l'argomento è null , il risultato è null :

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

Risultato:

null

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che si verifica un valore nullo come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi usare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Conteggio argomenti non valido

Chiamando DECOMPOSE() senza alcun argomento genera un errore:

SELECT DECOMPOSE()
FROM DUAL;

Risultato:

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

E anche passare troppi argomenti provoca un errore:

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

Risultato:

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