sql >> Database >  >> RDS >> Oracle

DECOMPOSE() Functie in Oracle

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

  1. sql join two table

  2. ProxySQL-native clustering met Kubernetes

  3. JSON_SEARCH() – Vind het pad naar een string in een JSON-document in MySQL

  4. Aandacht besteden aan schattingen