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