sql >> Databasteknik >  >> RDS >> Oracle

DECOMPOSE() Funktion i Oracle

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

  1. Hitta alla föräldrar i mysql-tabellen med en enda fråga (Rekursiv fråga)

  2. Hur man släpper flera tabeller i PostgreSQL med hjälp av ett jokertecken

  3. JSON_SEARCH() – Hitta sökvägen till en sträng i ett JSON-dokument i MySQL

  4. Sätt att veta hur man hanterar databaskorruption i SQL Server