I Oracle Database, DECOMPOSE()
funktion returnerar resultatet av att tillämpa en av Unicode-uppdelningarna på dess strängargument. Nedbrytningen bestäms av det andra (valfria) argumentet.
Det är motsatsen till COMPOSE()
funktion.
Syntax
Syntaxen ser ut så här:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Där båda argumenten kan vara vilken som helst av CHAR
, VARCHAR2
, NCHAR
, eller NVARCHAR2
datatyper, eller en typ som implicit kan konverteras till antingen VARCHAR2
eller NVARCHAR2
.
Angående det (valfria) andra argumentet:
CANONICAL
resulterar i kanonisk nedbrytning, som beskrivs i Unicode Standard-definitionen D68, och returnerar en sträng i NFD-normaliseringsformen.COMPATIBILITY
resulterar i kompatibilitetssönderdelning, som beskrivs i Unicode Standard-definitionen D65, och returnerar en sträng i NFKD-normaliseringsformuläret.
Standardbeteendet är att tillämpa den kanoniska uppdelningen.
Exempel
Här är ett exempel:
SELECT DECOMPOSE('ã') FROM DUAL;
Resultat:
ã
Men följande exempel är en bättre demonstration:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Resultat:
a\0303
Här använde vi ASCIISTR()
för att returnera en ASCII-version av resultatet av DECOMPOSE()
i databasens teckenuppsättning.
Här är vad som händer om vi använder ASCIISTR()
utan DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Resultat:
\00E3
Icke Unicode-tecken
Om argumentets teckenuppsättning inte är en av Unicode-teckenuppsättningarna, returneras argumentet oförändrat.
Exempel:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Resultat:
a
Nollargument
Om argumentet är null
, resultatet är null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Resultat:
null
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när ett nollvärde inträffar som ett resultat av en SQL SELECT
uttalande.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Ogiltigt antal argument
Anropar DECOMPOSE()
utan några argument resulterar i ett fel:
SELECT DECOMPOSE()
FROM DUAL;
Resultat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Och att skicka för många argument resulterar också i ett fel:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Resultat:
Error report - ORA-12702: invalid NLS parameter string used in SQL function