sql >> Database teknologi >  >> RDS >> Oracle

DECOMPOSE() Funktion i Oracle

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

  1. Django JSONField inde i ArrayField

  2. Kan jeg oprette en database ved hjælp af PDO i PHP?

  3. Understøttede formatmodeller til datofunktionerne ROUND() og TRUNC() i Oracle

  4. Sådan indsætter du flere rækker i MySQL