Dans Oracle, le TRANSLATE(...USING)
convertit son argument dans le jeu de caractères spécifié pour les conversions entre le jeu de caractères de la base de données et le jeu de caractères national.
Cette fonction ne doit pas être confondue avec le TRANSLATE()
, qui vous permet de faire plusieurs substitutions d'un seul caractère, un à un en une seule opération.
Le TRANSLATE(...USING)
La fonction est prise en charge dans Oracle principalement pour la compatibilité ANSI. Oracle recommande d'utiliser le TO_CHAR()
et TO_NCHAR()
fonctions à la place.
Syntaxe
La syntaxe ressemble à ceci :
TRANSLATE ( char USING
{ CHAR_CS | NCHAR_CS }
)
Où char
est l'expression à convertir, et :
- Spécifier le
USING
CHAR_CS
l'argument convertitchar
dans le jeu de caractères de la base de données. Le type de données de sortie estVARCHAR2
. - Spécifier le
USING
NCHAR_CS
l'argument convertitchar
dans le jeu de caractères national. Le type de données de sortie estNVARCHAR2
.
Exemple
Voici un exemple de base :
SELECT
TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;
Résultat :
CHAR_CS NCHAR_CS __________ ___________ Cat Cat
Pour démontrer la différence, voici ce qui se passe lorsque nous le passons au DUMP()
fonction :
SELECT
DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;
Résultat :
CHAR_CS NCHAR_CS _____________________ ______________________________ Typ=1 Len=3: C,a,t Typ=1 Len=6: ^@,C,^@,a,^@,t
Arguments nuls
Passer null
car l'argument renvoie null
:
SET NULL 'null';
SELECT
TRANSLATE(null USING CHAR_CS) AS Result
FROM DUAL;
Résultat :
null
Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null
se produit à la suite d'un SQL SELECT
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é.
Argument manquant
Appel de la fonction avec sans passer le char
l'argument génère une erreur :
SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;
Résultat :
Error starting at line : 1 in command - SELECT TRANSLATE(USING CHAR_CS) FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: