En Oracle Database, el DECOMPOSE()
La función devuelve el resultado de aplicar una de las descomposiciones de Unicode a su argumento de cadena. La descomposición está determinada por el segundo argumento (opcional).
Es lo contrario de COMPOSE()
función.
Sintaxis
La sintaxis es así:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )
Donde ambos argumentos pueden ser cualquiera de los CHAR
, VARCHAR2
, NCHAR
o NVARCHAR2
tipos de datos, o un tipo que se puede convertir implícitamente a VARCHAR2
o NVARCHAR2
.
Con respecto al segundo argumento (opcional):
CANONICAL
da como resultado una descomposición canónica, como se describe en la definición estándar Unicode D68, y devuelve una cadena en el formato de normalización NFD.COMPATIBILITY
da como resultado una descomposición de compatibilidad, como se describe en la definición estándar Unicode D65, y devuelve una cadena en el formato de normalización NFKD.
El comportamiento predeterminado es aplicar la descomposición canónica.
Ejemplo
He aquí un ejemplo:
SELECT DECOMPOSE('ã') FROM DUAL;
Resultado:
ã
Sin embargo, el siguiente ejemplo es una mejor demostración:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;
Resultado:
a\0303
Aquí, usamos ASCIISTR()
para devolver una versión ASCII del resultado de DECOMPOSE()
en el juego de caracteres de la base de datos.
Esto es lo que sucede si usamos ASCIISTR()
sin DECOMPOSE()
:
SELECT ASCIISTR('ã') FROM DUAL;
Resultado:
\00E3
Caracteres no Unicode
Si el juego de caracteres del argumento no es uno de los juegos de caracteres Unicode, el argumento se devuelve sin modificar.
Ejemplo:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;
Resultado:
a
Argumento nulo
Si el argumento es null
, el resultado es null
:
SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;
Resultado:
null
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que se produce un valor nulo 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.
Recuento de argumentos no válidos
Llamar a DECOMPOSE()
sin ningún argumento da como resultado un error:
SELECT DECOMPOSE()
FROM DUAL;
Resultado:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Y pasar demasiados argumentos también da como resultado un error:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;
Resultado:
Error report - ORA-12702: invalid NLS parameter string used in SQL function