sql之NVL 或 EXCEPTION NO_DATA_FOUND
sxdcgaq8080
阅读:52
2024-02-25 17:59:16
评论:0
我在一个填充表的过程中使用了以下 sql
SELECT NVL(SUM(COL1), 0),
NVL(SUM(COL2), 0)
INTO v_mytable.COLUMN1,
v_mytable.COLUMN2
FROM t1, t2
WHERE t1.id = t2.id
AND t1.date = t2.date
此外,对于 99% 的表行,这些列 = 0 并且此查询需要很长时间才能执行,因为在大多数情况下它会为两列返回 0。
使用异常处理是否更好,如下所示:
BEGIN
SELECT SUM(COL1),
SUM(COL2)
INTO v_mytable.COLUMN1,
v_mytable.COLUMN2
FROM t1, t2
WHERE t1.id = t2.id
AND t1.date = t2.date
EXCEPTION WHEN NO_DATA_FOUND THEN
v_mytable.COLUMN1 := 0 ;
v_mytable.COLUMN2 := 0 ;
END;
谢谢。
请您参考如下方法:
这两个块做完全不同的事情。您的 SELECT 语句不会抛出 NO_DATA_FOUND
如果 COL1 和/或 COL2 始终为 NULL,则出错。它只会在 v_mytable.COLUMN1
中放置一个 NULL和 v_mytable.COLUMN2
.
你可以做
SELECT SUM(COL1),
SUM(COL2)
INTO v_mytable.COLUMN1,
v_mytable.COLUMN2
FROM t1, t2
WHERE t1.id = t2.id
AND t1.date = t2.date
v_mytable.COLUMN1 := NVL( v_mytable.COLUMN1, 0 );
v_mytable.COLUMN2 := NVL( v_mytable.COLUMN2, 0 );
然而,我不希望这会更快。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。