A volte i valori predefiniti sono necessari. Normalmente puoi usare NVL o NVL2 quando ottieni valori NULL come valore di ritorno. Ma è anche possibile che non venga restituita alcuna riga. In questo caso, NVL o NVL2 non funziona, perché non ottieni alcun valore, nemmeno NULL. Pertanto, ci sono alcune opzioni, come produrre un valore NULL.
COALESCE
-- Use the COALESCE statement, MAX produces automatic a NULL value SELECT COALESCE(MAX(dummy), 'Z') result FROM DUAL WHERE DUMMY = 'Y'; -- 'X'
NVL and MAX
-- Use the NVL statement, MAX produces automatic a NULL value
SELECT NVL(MAX(dummy), 'Z') result
FROM DUAL
WHERE DUMMY = 'Y'; -- 'X'
EXISTS
-- Use the EXISTS statement in combination with CASE
SELECT CASE
WHEN EXISTS(SELECT 1
FROM DUAL
WHERE DUMMY = 'Y') -- 'X'
THEN (SELECT DUMMY
FROM DUAL
WHERE DUMMY = 'Y') -- 'X'
ELSE 'Z' result
END
FROM DUAL;
COUNT and MIN
-- Use the COUNT function in combination with CASE
-- MIN is needed to identify the correct value
SELECT CASE
WHEN COUNT(1) > 0
THEN MIN(DUMMY)
ELSE 'Z'
END result
FROM DUAL
WHERE DUMMY = 'Y'; -- 'X'