sql >> Database >  >> RDS >> Oracle

NLS_COLLATION_NAME() Functie in Oracle

In Oracle Database, de NLS_COLLATION_NAME() functie retourneert de naam van een bepaalde sortering, op basis van zijn ID. U geeft de sorteer-ID door wanneer u de functie aanroept, en het retourneert de sorteernaam.

Syntaxis

De syntaxis gaat als volgt:

NLS_COLLATION_NAME(expr [, flag ])

Waar expr is de sorteer-ID van het type NUMBER .

De flag argument is een optioneel argument dat alleen van toepassing is op Unicode Collation Algorithm (UCA) sorteringen. Het bepaalt of de functie de korte of lange vorm van de sorteernaam moet retourneren.

De flag argument kan een van de volgende zijn:

Vlag Beschrijving
'S' of 's' Retourneert de korte vorm van de sorteernaam.
'L' of 'l' Retourneert de lange vorm van de sorteernaam.

De standaardwaarde voor deze vlag is 'L' .

Voorbeeld

Hier is een eenvoudig voorbeeld:

SELECT NLS_COLLATION_NAME(70)
FROM DUAL;

Resultaat:

XAZERBAIJANI

Hier zijn nog enkele voorbeelden:

SELECT 
    NLS_COLLATION_NAME(4112) AS "1",
    NLS_COLLATION_NAME(4116) AS "2"
FROM DUAL;

Resultaat:

          1             2 
___________ _____________ 
FRENCH_M    CANADIAN_M   

Lange/korte vormvlag

Zoals vermeld, kunnen we een optionele vlag doorgeven om te bepalen of de korte vorm of de lange vorm van de sorteernaam moet worden geretourneerd.

SELECT 
    NLS_COLLATION_NAME(208920, 'L') AS "Long",
    NLS_COLLATION_NAME(208920, 'S') AS "Short"
FROM DUAL;

Resultaat:

                                      Long           Short 
__________________________________________ _______________ 
UCA0620_THAI_S4_VS_BN_NY_EN_FN_HN_DN_MN    UCA0620_THAI   

De standaardwaarde voor deze vlag is 'L' . Dus als we de vlag weglaten, wordt de lange vorm geretourneerd:

SELECT 
    NLS_COLLATION_NAME(208920) AS "Default"
FROM DUAL;

Resultaat:

                                   Default 
__________________________________________ 
UCA0620_THAI_S4_VS_BN_NY_EN_FN_HN_DN_MN   

Deze vlag is echter alleen van toepassing op Unicode Collation Algorithm (UCA)-sorteringen.

Als we de vlag toepassen op een niet-UCA-sortering, zien we geen verschil:

SELECT 
    NLS_COLLATION_NAME(4112, 'L') AS "1",
    NLS_COLLATION_NAME(4112, 'S') AS "2"
FROM DUAL;

Resultaat:

          1           2 
___________ ___________ 
FRENCH_M    FRENCH_M   

Ongeldige sortering

Het doorgeven van een ongeldige sorteernaam resulteert in null :

SET NULL 'null';
SELECT NLS_COLLATION_NAME(4113)
FROM DUAL;

Resultaat:

null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Nullargument

Doorgeven van null retourneert null :

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

Resultaat:

null

Onjuist aantal argumenten

Het aanroepen van de functie zonder het doorgeven van argumenten resulteert in een fout:

SELECT NLS_COLLATION_NAME()
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT NLS_COLLATION_NAME()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

En het doorgeven van te veel argumenten resulteert ook in een fout:

SELECT NLS_COLLATION_NAME(4112, 'S', 'L')
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT NLS_COLLATION_NAME(4112, 'S', 'L')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. InMemory DUPLICATE Verwarring in Oracle RAC

  2. ORA-00907:rechter haakje ontbreekt

  3. MySQL-wachtwoordfunctie

  4. Hoe bereken ik een lopend totaal in SQL zonder een cursor te gebruiken?