PL / SQL异常处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

在PL / SQL中,如何捕获异常并在被捕获时执行代码,以及如何将它们传播到调用块?

CREATE OR REPLACE PROCEDURE MY_PROCEDURE() 
IS
BEGIN
    do_stuff();

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        -- Do something
        handle_exception();

    WHEN OTHERS THEN
        -- Propagate exception
        RAISE;
END;

但是,我应该使用什么命令来忽略一个或所有引发的异常,并将执行控制返回到调用块?

提问于
用户回答回答于

在这种情况下,可以使用 NULL

[...]
EXCEPTION

    WHEN OTHERS THEN
        NULL;
END;

忽略例外的两种典型情况是:

CREATE OR REPLACE PROCEDURE MY_PROCEDURE() 
IS
    l_empoyee_name  EMPLOYEES.EMPLOYEE_NAME%TYPE;
BEGIN
    -- Catch potential NO_DATA_FOUND exception and continue
    BEGIN 
        SELECT EMPLOYEE_NAME
        INTO l_empoyee_name
        FROM EMPLOYEES
        WHERE EMPLOYEE_ID = 12345;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
        WHEN OTHERS THEN
            RAISE;
    END;

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Propagate exception
        RAISE;
END;
BEGIN

    do_stuff();

EXCEPTION

    WHEN OTHERS THEN
        -- Ignore all exceptions and return control to calling block
        NULL;
END;
用户回答回答于

另一种情况下,当调用一个预期创建一个对象的脚本(如果该脚本不存在),并且没有该对象的创建或替换语法。PLSQL对象具有创建或替换语法,但表和索引不能。

扫码关注云+社区

领取腾讯云代金券