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

Fonction TRANSLATE(… USING) dans Oracle

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 }
          )

char est l'expression à convertir, et :

  • Spécifier le USING CHAR_CS l'argument convertit char dans le jeu de caractères de la base de données. Le type de données de sortie est VARCHAR2 .
  • Spécifier le USING NCHAR_CS l'argument convertit char dans le jeu de caractères national. Le type de données de sortie est NVARCHAR2 .

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: