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

Función COLLATION() en Oracle

En Oracle Database, COLLATION() La función devuelve el nombre de la intercalación derivada para su argumento.

Sintaxis

La sintaxis es así:

COLLATION(expr)

Donde expr debe evaluarse como una cadena de caracteres de tipo CHAR , VARCHAR2 , LONG , NCHAR o NVARCHAR2 .

Ejemplo

He aquí un ejemplo básico:

SELECT COLLATION('Boat')
FROM DUAL;

Resultado:

USING_NLS_COMP

Ejemplo con COLLATE Cláusula

Esto es lo que sucede cuando usamos COLLATE cláusula para especificar explícitamente la intercalación:

SELECT COLLATION('Boat' COLLATE LATIN_AI) 
FROM DUAL;

Resultado:

LATIN_AI

Consideraciones al usar NLS_SORT

La COLLATION() La función devuelve solo la intercalación enlazada a datos, y no la intercalación dinámica establecida por NLS_SORT parámetro.

Ejemplo:

SELECT COLLATION('Boat' COLLATE USING_NLS_SORT) 
FROM DUAL;

Resultado:

USING_NLS_SORT

Puede usar SYS_CONTEXT() función para devolver el valor de NLS_SORT parámetro:

SELECT SYS_CONTEXT('USERENV','NLS_SORT')
FROM DUAL;

Resultado:

BINARY

Sin embargo, cualquier sufijo como _CI , _AI y _CS se devuelve:

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

Se devuelve la intercalación, incluso cuando se pasa null :

SELECT COLLATION(null)
FROM DUAL;

Resultado:

USING_NLS_COMP

Recuento de argumentos incorrecto

Llamar a la función sin pasar ningún argumento da como resultado un error:

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:

Y pasar demasiados argumentos también da como resultado un error:

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: