【发布时间】:2012-03-04 17:57:04
【问题描述】:
因为它发生在封闭的块中
如果匿名块调用引发异常的函数,则这些异常既不会显示在控制台上,也不会被困在封闭块中...
更重要的是,在函数中被handler捕获后,匿名块中函数调用后的行正常执行!
被调用的程序是:
CREATE OR REPLACE PROCEDURE qt(pno number, qty OUT number)
IS
BEGIN
select sum(qty_on_hand) into qty from products where productno=pno;
END;
调用块是:
DECLARE
qty number;
BEGIN
qt(&pno, qty);
dbms_output.put_line('qty is: '||qty);
END;
如果产品编号无效,则不会显示错误;为什么?
【问题讨论】:
-
'在被函数中的处理程序捕获后'...如果异常被捕获,那么它将不会被传播,除非捕获器重新引发它。听起来捕手可能正在使用
dbms_output来“报告”错误,在这种情况下,您需要set serveroutput on才能看到它。您确实需要显示函数和匿名块代码以获得任何明智的帮助,否则我们只能猜测正在发生的事情以及您想要/期望发生的事情。
标签: oracle function stored-procedures exception-handling plsql