No banco de dados Oracle, o
COLLATION()
A função retorna o nome do agrupamento derivado para seu argumento. Sintaxe
A sintaxe fica assim:
COLLATION(expr)
Onde
expr
deve avaliar para uma cadeia de caracteres do tipo CHAR
, VARCHAR2
, LONG
, NCHAR
, ou NVARCHAR2
. Exemplo
Segue um exemplo básico:
SELECT COLLATION('Boat')
FROM DUAL;
Resultado:
USING_NLS_COMP
Exemplo com o COLLATE
Cláusula
Veja o que acontece quando usamos o
COLLATE
cláusula para especificar explicitamente o agrupamento:SELECT COLLATION('Boat' COLLATE LATIN_AI)
FROM DUAL;
Resultado:
LATIN_AI
Consideração ao usar NLS_SORT
O
COLLATION()
A função retorna apenas o agrupamento vinculado a dados, e não o agrupamento dinâmico definido pelo NLS_SORT
parâmetro. Exemplo:
SELECT COLLATION('Boat' COLLATE USING_NLS_SORT)
FROM DUAL;
Resultado:
USING_NLS_SORT
Você pode usar o
SYS_CONTEXT()
função para retornar o valor do NLS_SORT
parâmetro:SELECT SYS_CONTEXT('USERENV','NLS_SORT')
FROM DUAL;
Resultado:
BINARY
No entanto, qualquer sufixo como
_CI
, _AI
e _CS
é retornado:SELECT
COLLATION('Boat' COLLATE USING_NLS_SORT_CI) AS "_CI",
COLLATION('Boat' COLLATE USING_NLS_SORT_CS) AS "_CS",
COLLATION('Boat' COLLATE USING_NLS_SORT_AI) AS "_AI"
FROM DUAL;
Resultado:
_CI _CS _AI ____________________ ____________________ ____________________ USING_NLS_SORT_CI USING_NLS_SORT_CS USING_NLS_SORT_AI
Argumento nulo
O agrupamento é retornado, mesmo ao passar
null
:SELECT COLLATION(null)
FROM DUAL;
Resultado:
USING_NLS_COMP
Contagem incorreta de argumentos
Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT COLLATION()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT COLLATION() 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:
E passar muitos argumentos também resulta em um erro:
SELECT COLLATION('Boat', 'Dang')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT COLLATION('Boat', 'Dang') 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: