In Oracle Database, de DECOMPOSE()
functie retourneert het resultaat van het toepassen van een van de Unicode-decomposities op het tekenreeksargument. De decompositie wordt bepaald door het tweede (optionele) argument.
Het is het tegenovergestelde van de COMPOSE()
functie.
Syntaxis
De syntaxis gaat als volgt:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Waar beide argumenten een van de CHAR
. kunnen zijn , VARCHAR2
, NCHAR
, of NVARCHAR2
datatypes, of een type dat impliciet kan worden geconverteerd naar VARCHAR2
of NVARCHAR2
.
Wat betreft het (optionele) tweede argument:
CANONICAL
resulteert in canonieke decompositie, zoals beschreven in de Unicode Standard-definitie D68, en retourneert een tekenreeks in de NFD-normalisatievorm.COMPATIBILITY
resulteert in compatibiliteitsdecompositie, zoals beschreven in de Unicode Standard-definitie D65, en retourneert een tekenreeks in de NFKD-normalisatievorm.
Het standaardgedrag is om de canonieke decompositie toe te passen.
Voorbeeld
Hier is een voorbeeld:
SELECT DECOMPOSE('ã') FROM DUAL;
Resultaat:
ã
Het volgende voorbeeld is echter een betere demonstratie:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Resultaat:
a\0303
Hier gebruikten we ASCIISTR()
om een ASCII-versie van het resultaat van DECOMPOSE()
. te retourneren in de database-tekenset.
Dit is wat er gebeurt als we ASCIISTR()
gebruiken zonder DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Resultaat:
\00E3
Niet Unicode-tekens
Als de tekenset van het argument niet een van de Unicode-tekensets is, wordt het argument ongewijzigd geretourneerd.
Voorbeeld:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Resultaat:
a
Nullargument
Als het argument null
is , het resultaat is null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Resultaat:
null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer een null-waarde optreedt als resultaat van een SQL SELECT
verklaring.
U kunt echter SET NULL
gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ongeldig aantal argumenten
DECOMPOSE()
aanroepen zonder argumenten resulteert in een fout:
SELECT DECOMPOSE()
FROM DUAL;
Resultaat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
En het doorgeven van te veel argumenten resulteert ook in een fout:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Resultaat:
Error report - ORA-12702: invalid NLS parameter string used in SQL function