V databázi Oracle je to DECOMPOSE()
Funkce vrací výsledek použití jednoho z rozkladů Unicode na argument řetězce. Rozklad je určen druhým (nepovinným) argumentem.
Je opakem COMPOSE()
funkce.
Syntaxe
Syntaxe vypadá takto:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Kde oba argumenty mohou být libovolný z CHAR
, VARCHAR2
, NCHAR
nebo NVARCHAR2
datové typy nebo typ, který lze implicitně převést buď na VARCHAR2
nebo NVARCHAR2
.
Pokud jde o (nepovinný) druhý argument:
CANONICAL
vede ke kanonickému rozkladu, jak je popsáno v definici standardu Unicode D68, a vrací řetězec ve formě normalizace NFD.COMPATIBILITY
vede k rozkladu kompatibility, jak je popsáno v definici standardu Unicode D65, a vrací řetězec ve formě normalizace NFKD.
Výchozí chování je použít kanonický rozklad.
Příklad
Zde je příklad:
SELECT DECOMPOSE('ã') FROM DUAL;
Výsledek:
ã
Následující příklad je však lepší ukázkou:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Výsledek:
a\0303
Zde jsme použili ASCIISTR()
vrátit ASCII verzi výsledku DECOMPOSE()
ve znakové sadě databáze.
Co se stane, když použijeme ASCIISTR()
bez DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Výsledek:
\00E3
Znaky jiné než Unicode
Pokud znaková sada argumentu není jednou ze znakových sad Unicode, argument je vrácen nezměněný.
Příklad:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Výsledek:
a
Nulový argument
Pokud je argument null
, výsledkem je null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Výsledek:
null
Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo, kdykoli se v důsledku příkazu SQL SELECT
objeví hodnota null prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null
by měl být vrácen.
Neplatný počet argumentů
Volání DECOMPOSE()
bez jakýchkoli argumentů vede k chybě:
SELECT DECOMPOSE()
FROM DUAL;
Výsledek:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
A předání příliš mnoha argumentů také vede k chybě:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Výsledek:
Error report - ORA-12702: invalid NLS parameter string used in SQL function