En Oracle, TRANSLATE(...USING)
La función convierte su argumento en el juego de caracteres especificado para conversiones entre el juego de caracteres de la base de datos y el juego de caracteres nacional.
Esta función no debe confundirse con el TRANSLATE()
función, que le permite realizar varias sustituciones de un solo carácter, uno a uno en una sola operación.
El TRANSLATE(...USING)
La función se admite en Oracle principalmente para la compatibilidad con ANSI. Oracle recomienda que usemos TO_CHAR()
y TO_NCHAR()
funciones en su lugar.
Sintaxis
La sintaxis es así:
TRANSLATE ( char USING
{ CHAR_CS | NCHAR_CS }
)
Donde char
es la expresión a convertir, y:
- Especificando el
USING
CHAR_CS
el argumento conviertechar
en el juego de caracteres de la base de datos. El tipo de datos de salida esVARCHAR2
. - Especificando el
USING
NCHAR_CS
el argumento conviertechar
en el conjunto de caracteres nacionales. El tipo de datos de salida esNVARCHAR2
.
Ejemplo
He aquí un ejemplo 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 demostrar la diferencia, esto es lo que sucede cuando lo pasamos a DUMP()
función:
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
Pasando null
ya que el argumento devuelve null
:
SET NULL 'null';
SELECT
TRANSLATE(null USING CHAR_CS) AS Result
FROM DUAL;
Resultado:
null
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null
debe ser devuelto.
Argumento faltante
Llamar a la función sin pasar el char
el argumento da como resultado un error:
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: