sql >> Base de Datos >  >> RDS >> Oracle

Función DECOMPOSE() en Oracle

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