Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função TRANSLATE(… USING) no Oracle


No Oracle, o TRANSLATE(...USING) A função converte seu argumento no conjunto de caracteres especificado para conversões entre o conjunto de caracteres do banco de dados e o conjunto de caracteres nacional.

Esta função não deve ser confundida com o TRANSLATE() função, que permite fazer várias substituições um para um de caractere único em uma operação.

O TRANSLATE(...USING) A função é suportada no Oracle principalmente para compatibilidade com ANSI. A Oracle recomenda que usemos o TO_CHAR() e TO_NCHAR() funções em vez disso.

Sintaxe


A sintaxe fica assim:
TRANSLATE ( char USING
          { CHAR_CS | NCHAR_CS }
          )

Onde char é a expressão a ser convertida, e:
  • Especificando o USING CHAR_CS argumento converte char no conjunto de caracteres do banco de dados. O tipo de dados de saída é VARCHAR2 .
  • Especificando o USING NCHAR_CS argumento converte char no conjunto de caracteres nacional. O tipo de dados de saída é NVARCHAR2 .

Exemplo


Segue um exemplo básico:
SELECT 
    TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
    TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;

Resultado:
   CHAR_CS    NCHAR_CS 
__________ ___________ 
Cat        Cat        

Para demonstrar a diferença, veja o que acontece quando passamos para o DUMP() função:
SELECT 
    DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
    DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;

Resultado:
              CHAR_CS                       NCHAR_CS 
_____________________ ______________________________ 
Typ=1 Len=3: C,a,t    Typ=1 Len=6: ^@,C,^@,a,^@,t   

Argumentos nulos


Passando null pois o argumento retorna null :
SET NULL 'null';
SELECT 
    TRANSLATE(null USING CHAR_CS) AS Result
FROM DUAL;

Resultado:
null

Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que null ocorre como resultado de um SQL SELECT demonstração.

No entanto, você pode usar SET NULL para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null deve ser devolvido.

Argumento ausente


Chamando a função sem passar o char argumento resulta em um erro:
SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;

Resultado:
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: