mch*_*cha 3 sql oracle performance plsql exception-handling
我有一个程序,填写表格以下的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
Run Code Online (Sandbox Code Playgroud)
此外,对于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;
Run Code Online (Sandbox Code Playgroud)
谢谢.
这两个块完全不同.NO_DATA_FOUND如果COL1和/或COL2始终为NULL,则SELECT语句不会引发错误.它只会在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 );
Run Code Online (Sandbox Code Playgroud)
但是,我不希望它更快.