当第一条select语句发生异常时。在任何情况下,都会执行第二个select语句和函数吗?还是会跳过以下所有语句?
BEGIN
SELECT ...
SELECT ...
procedure_that_performs_select();
EXCEPTION
WHEN NO_DATA_FOUND THEN ...
END
答案 0 :(得分:2)
在PLSQL
中,异常的发生会在异常发生时停止程序执行,并跳至EXCEPTION
块(如果有)进行处理,否则将异常引发给客户端。
您可以在测试块中看到此行为。
在这里,我们将在异常之前和之后进行打印,并且可以在异常未打印之后观察下一条语句:
BEGIN
DBMS_OUTPUT.PUT_LINE('About to throw an exception');
RAISE_APPLICATION_ERROR(-20001,'Exception');
DBMS_OUTPUT.PUT_LINE('Done throwing exception');
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Handling the exception');
END;
/
结果:
About to throw an exception
Handling the exception
注意:在您提供的示例中,EXCEPTION
块仅处理NO DATA FOUND
异常,因此将引发其他类型的异常,而不是通过异常处理程序运行。但是无论如何,在异常发生时,事情都会停止处理。
答案 1 :(得分:1)
一旦控件转到异常块,它就不会返回到pl / sql块的开始或声明部分。 同样,如果您的第一个select语句中有错误,则将执行异常块并使用相应的处理程序。如果您既未提及相应的处理程序,也未提及WHEN OTHERS,则控件将转到调用环境(任何过程或接口/ IDE)。
如果仍然希望运行第二个select语句,则可以在异常处理程序中编写另一个pl / sql块。