Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction DECOMPOSE() dans Oracle

Dans Oracle Database, le DECOMPOSE() La fonction renvoie le résultat de l'application de l'une des décompositions Unicode à son argument de chaîne. La décomposition est déterminée par le deuxième argument (optionnel).

C'est le contraire de COMPOSE() fonction.

Syntaxe

La syntaxe ressemble à ceci :

DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )

Où les deux arguments peuvent être l'un des CHAR , VARCHAR2 , NCHAR , ou NVARCHAR2 types de données, ou un type qui peut être implicitement converti en VARCHAR2 ou NVARCHAR2 .

Concernant le deuxième argument (optionnel) :

  • CANONICAL entraîne une décomposition canonique, comme décrit dans la définition standard Unicode D68, et renvoie une chaîne sous la forme de normalisation NFD.
  • COMPATIBILITY entraîne une décomposition de compatibilité, comme décrit dans la définition standard Unicode D65, et renvoie une chaîne sous la forme de normalisation NFKD.

Le comportement par défaut consiste à appliquer la décomposition canonique.

Exemple

Voici un exemple :

SELECT DECOMPOSE('ã') FROM DUAL;

Résultat :

Cependant, l'exemple suivant est une meilleure démonstration :

SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;

Résultat :

a\0303

Ici, nous avons utilisé ASCIISTR() pour retourner une version ASCII du résultat de DECOMPOSE() dans le jeu de caractères de la base de données.

Voici ce qui se passe si nous utilisons ASCIISTR() sans DECOMPOSE() :

SELECT ASCIISTR('ã') FROM DUAL;

Résultat :

\00E3

Caractères non Unicode

Si le jeu de caractères de l'argument n'est pas l'un des jeux de caractères Unicode, l'argument est renvoyé tel quel.

Exemple :

SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;

Résultat :

a

Argument nul

Si l'argument est null , le résultat est null :

SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;

Résultat :

null

Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois qu'une valeur nulle se produit à la suite d'un SELECT SQL déclaration.

Cependant, vous pouvez utiliser SET NULL pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null doit être retourné.

Nombre d'arguments non valides

Appelant DECOMPOSE() sans aucun argument génère une erreur :

SELECT DECOMPOSE()
FROM DUAL;

Résultat :

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Et passer trop d'arguments entraîne également une erreur :

SELECT DECOMPOSE('a', 'b')
FROM DUAL;

Résultat :

Error report -
ORA-12702: invalid NLS parameter string used in SQL function