sql >> Databáze >  >> RDS >> Oracle

Funkce DECOMPOSE() v Oracle

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

  1. Řešení dlouhodobých dotazů MySQL

  2. Jak převést XMLTYPE ve VARCHAR v ORACLE?

  3. DBCA Create Database špatný REMOTE_LISTENER

  4. Sjednocení serveru SQL, ale udržujte pořádek