中止PL/SQL程序

Mar*_*ret 19 oracle plsql

如何让PL/SQL程序中途结束?如果发生异常,我无法找到任何方式优雅地结束程序 - 如果我处理它,它会循环回代码.

基本上我想做的是强迫应用程序不要在某些条件下运行.所以,我想在程序的顶部添加这样的东西:

BEGIN
    IF [condition]
        EXIT
    END IF
    [the rest of the program]
END
Run Code Online (Sandbox Code Playgroud)

建议的方法是抛出一个异常,但是块可能是一个内部块 - 所以块之外的程序只是继续.

Mat*_*son 50

你可以使用RETURN

MWATSON@> set serveroutput on
MWATSON@> !cat test.sql

BEGIN
 IF 1 = 1 THEN
    DBMS_OUTPUT.PUT_LINE('ABOUT TO EXIT');
    RETURN;
  END IF;
  DBMS_OUTPUT.PUT_LINE('DID NOT EXIT');
END;

MWATSON@> @test
  8  /
ABOUT TO EXIT

PL/SQL procedure successfully completed.

MWATSON@> 
Run Code Online (Sandbox Code Playgroud)


KLe*_*ine 5

我知道现在回复已经太晚了,但是我还有一种方法在之前的答案中没有提到。

使用 RAISE_APPLICATION_ERROR 并在 EXCEPTION 部分捕获此异常。由于这会回滚未提交的事务,因此请确保在需要时显式提交它们。

这样你就可以优雅地从程序中返回,而不用在使用 RETURN 时在 IF 块中进行异常处理。

我用这个作为参考。 http://www.plsql-tutorial.com/plsql-exception-handling.htm