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 convertechar
no conjunto de caracteres do banco de dados. O tipo de dados de saída éVARCHAR2
. - Especificando o
USING
NCHAR_CS
argumento convertechar
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: