SELECT AMOUNT
INTO l_Amount
FROM T1
WHERE...
条件比较长,省略。可以保证最多只有一条相符结果。
无记录的时候,想把l_Amount设为0。
为了应付无记录的情况,想了以下这些写法:
第1种,先检查件数:
SELECT COUNT(*) INTO l_Cnt 以下省略
IF l_Cnt > 0 THEN
SELECT AMOUNT INTO l_Amount 以下省略
END IF;
第2种,用exception:
FUNCTION GETAMOUNT RETURN NUMBER
IS l_Ret BEGIN SELECT AMOUNT INTO l_Ret 以下省略
RETURN l_Ret
WHEN NO_DATA_FOUND THEN RETURN 0 END;
第3种,用UNION:
SELECT AMOUNT
INTO l_Amount
FROM
( SELECT AMOUNT
FROM T1
WHERE...
UNION ALL
SELECT 0 FROM DUAL
)
WHERE rownum <=1;
第4种,用NVL函数:
SELECT NVL(MAX(AMOUNT), 0)因为最多就一条记录,MAX,MIN之类的函数都可以
INTO l_Amount
FROM T1
WHERE...