梦幻之旅

DEBUG - 天道酬勤

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 Trackbacks
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...
posted on 2012-12-25 19:40 HUIKK 阅读(820) 评论(0)  编辑  收藏 所属分类: DataBase

只有注册用户登录后才能发表评论。


网站导航: