sql >> Database teknologi >  >> RDS >> Oracle

COALESCE() Funktion i Oracle

I Oracle Database er COALESCE() funktion returnerer det første ikke-nul udtryk udtrykslisten.

Syntaks

Syntaksen ser sådan ud:

COALESCE(expr [, expr ]...) 

Mindst to udtryk skal bestå.

Eksempel

Her er et eksempel til demonstration:

SELECT COALESCE(null, 7)
FROM DUAL; 

Resultat:

7

Her er nogle flere eksempler:

SET NULL 'null'; SELECT COALESCE(null, null, 1, 2, 3) AS "r1", COALESCE(1, null, 2, 3) AS "r2", COALESCE(null, 3, 2, 1) AS "r3", COALESCE(1, 2, 3, null) AS "r4", COALESCE(null, null) AS "r5" FROM DUAL;

Resultat:

 r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null 

Vi kan se, at COALESCE() returnerer null når alle argumenter er nul.

Angående den første linje SET NULL 'null'; , jeg tilføjede det, så min SQLcl-session returnerer null når resultatet er nul.

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Databaseeksempel

Antag, at vi kører følgende forespørgsel:

SET NULL 'null';
SELECT 
    LOCATION_ID,
    STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; 

Resultat:

 LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 Californien 

Vi kan se, at flere af rækkerne er null i STATE_PROVINCE kolonne.

Her er forespørgslen igen, bortset fra at denne gang bruger vi COALESCE() mod STATE_PROVINCE kolonne:

SELECT 
    LOCATION_ID,
    COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY; 

Resultat:

 LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') _________________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 Californien 

Så vi brugte COALESCE() for at returnere N/A hver gang der opstod en nulværdi.

COALESCE() vs CASE

Følgende:

COALESCE(expr1, expr2) 

Svarer til dette:

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END 

Ugyldigt antal argumenter

Kaldning af funktionen uden at sende nogen argumenter resulterer i en fejl:

SELECT COALESCE()
FROM DUAL; 

Resultat:

SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter til funktion"

  1. Postgres/JSON - opdater alle array-elementer

  2. Postgres FOR LOOP

  3. Hvorfor er aggregerede funktioner ikke tilladt i where-klausulen

  4. Hvordan får man vist typen af ​​en variabel i PL/SQL?