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...个人看法:
第1种方案,太傻
第3种方案,有些罗索
第4种方案,用MAX之类的函数虽然结果正确但感觉不太合适第2种方案,觉得比其他的好一些大家怎么认为?
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...个人看法:
第1种方案,太傻
第3种方案,有些罗索
第4种方案,用MAX之类的函数虽然结果正确但感觉不太合适第2种方案,觉得比其他的好一些大家怎么认为?
我就喜欢用第一种
首先,可以灵活的处理问题,在找不到数据的时候
可以执行其他操作,
可以提示各种不同的错误提示,
可以RETURN,
可以灵活的控制各种查询条件
而第二种FUNCTION的话,就很难控制各种查询条件了吧.
第三种第四种从来没用过.