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):
CANONICALresulta 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.COMPATIBILITYresulta 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