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

Função DECOMPOSE() no Oracle


No banco de dados Oracle, o DECOMPOSE() A função retorna o resultado da aplicação de uma das decomposições Unicode ao seu argumento de string. A decomposição é determinada pelo segundo argumento (opcional).

É o oposto do COMPOSE() função.

Sintaxe


A sintaxe fica assim:
DECOMPOSE( string [, { 'CANONICAL' | 'COMPATIBILITY' } ] )

Onde ambos os argumentos podem ser qualquer um dos CHAR , VARCHAR2 , NCHAR , ou NVARCHAR2 tipos de dados ou um tipo que pode ser convertido implicitamente em VARCHAR2 ou NVARCHAR2 .

Em relação ao segundo argumento (opcional):
  • CANONICAL resulta em decomposição canônica, conforme descrito na definição do padrão Unicode D68, e retorna uma string no formulário de normalização NFD.
  • COMPATIBILITY resulta em decomposição de compatibilidade, conforme descrito na definição do padrão Unicode D65, e retorna uma string no formulário de normalização NFKD.

O comportamento padrão é aplicar a decomposição canônica.

Exemplo


Aqui está um exemplo:
SELECT DECOMPOSE('ã') FROM DUAL;

Resultado:

No entanto, o exemplo a seguir é uma demonstração melhor:
SELECT ASCIISTR(DECOMPOSE('ã')) FROM DUAL;

Resultado:
a\0303

Aqui, usamos ASCIISTR() para retornar uma versão ASCII do resultado de DECOMPOSE() no conjunto de caracteres do banco de dados.

Veja o que acontece se usarmos ASCIISTR() sem DECOMPOSE() :
SELECT ASCIISTR('ã') FROM DUAL;

Resultado:
\00E3

Caracteres não Unicode


Se o conjunto de caracteres do argumento não for um dos conjuntos de caracteres Unicode, o argumento será retornado sem modificações.

Exemplo:
SELECT ASCIISTR(DECOMPOSE('a')) FROM DUAL;

Resultado:
a

Argumento nulo

Se o argumento for null , o resultado é null :

SET NULL 'null';
SELECT DECOMPOSE(null)
FROM DUAL;

Resultado:

null

Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que um valor nulo 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.

Contagem de argumentos inválidos

Chamando DECOMPOSE() sem nenhum argumento resulta em um erro:

SELECT DECOMPOSE()
FROM DUAL;

Resultado:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

E passar muitos argumentos também resulta em um erro:
SELECT DECOMPOSE('a', 'b')
FROM DUAL;

Resultado:

Error report -
ORA-12702: invalid NLS parameter string used in SQL function