I Oracle Database er DECOMPOSE()
funktion returnerer resultatet af at anvende en af Unicode-dekomponeringerne på dets strengargument. Dekomponeringen bestemmes af det andet (valgfri) argument.
Det er det modsatte af COMPOSE()
funktion.
Syntaks
Syntaksen ser sådan ud:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Hvor begge argumenter kan være en hvilken som helst af CHAR
, VARCHAR2
, NCHAR
eller NVARCHAR2
datatyper eller en type, der implicit kan konverteres til enten VARCHAR2
eller NVARCHAR2
.
Angående det (valgfrie) andet argument:
CANONICAL
resulterer i kanonisk dekomponering, som beskrevet i Unicode Standard-definitionen D68, og returnerer en streng i NFD-normaliseringsformen.COMPATIBILITY
resulterer i kompatibilitetsnedbrydning, som beskrevet i Unicode Standard-definitionen D65, og returnerer en streng i NFKD-normaliseringsformen.
Standardadfærden er at anvende den kanoniske dekomponering.
Eksempel
Her er et eksempel:
SELECT DECOMPOSE('ã') FROM DUAL;
Resultat:
ã
Det følgende eksempel er dog en bedre demonstration:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Resultat:
a\0303
Her brugte vi ASCIISTR()
for at returnere en ASCII-version af resultatet af DECOMPOSE()
i databasens tegnsæt.
Her er, hvad der sker, hvis vi bruger ASCIISTR()
uden DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Resultat:
\00E3
Ikke Unicode-tegn
Hvis argumentets tegnsæt ikke er et af Unicode-tegnsættene, returneres argumentet uændret.
Eksempel:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Resultat:
a
Nul-argument
Hvis argumentet er null
, resultatet er null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Resultat:
null
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når der opstår en null-værdi som et resultat af en SQL SELECT
erklæring.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Ugyldigt argumentantal
Kalder DECOMPOSE()
uden nogen argumenter resulterer i en fejl:
SELECT DECOMPOSE()
FROM DUAL;
Resultat:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Og at sende for mange argumenter resulterer også i en fejl:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Resultat:
Error report - ORA-12702: invalid NLS parameter string used in SQL function