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