【问题标题】:Execute all the procedure in plsql block .Even if on proc has error inside it执行 plsql 块中的所有过程。即使在 proc 内部有错误
【发布时间】:2020-02-13 03:56:29
【问题描述】:

我有 3 个在 PLSQL 块中调用的过程。 程序 1 内部有异常处理。 程序 2 内部没有异常处理。 程序 3 内部有异常处理。

当执行 plsql 块时。故意在 proc 2 中,我保持了类似条件的错误。 所以 proc 1 成功运行并更新表。 Proc 2 抛出一些错误由于 proc 2 中的错误,proc 3 也无法运行

所以我想绕过类似条件的错误

1) 我在 plsql 块中尝试过异常处理

2) Pragma 自主转换。

create or replace PROCEDURE PROC1 AS ----HAS EXCEPTIONAL HADLING
BEGIN
  UPDATE EMP
SET ENAME='uMANG_17'
WHERE EMPNO=7369;

COMMIT;
EXCEPTION

    WHEN OTHERS THEN
        -- Ignore all exceptions and return control to calling block
        NULL;
END PROC1;
create or replace PROCEDURE PROC2 AS ----DOES NOT HAVE EXCEPTIONAL HADLING
BEGIN
 UPDATE EMP
SET ENAME='ROHAN_02'
WHERE HIREDATE='7499';

COMMIT;

END PROC2;
create or replace PROCEDURE PROC3 AS ----HAS EXCEPTIONAL HADLING
BEGIN

UPDATE EMP
SET ENAME='JATIN_10'
WHERE EMPNO=7521;

COMMIT;
EXCEPTION

    WHEN OTHERS THEN
        -- Ignore all exceptions and return control to calling block
        NULL;
END PROC3;
BEGIN
PROC1;---has update statement
PROC2;--- has error like condition
PROC3;-- has update statement
END;
/

1) 应该更新所有 3 个过程。

2) 上面的代码运行,但它没有更新 PROC 3。

3)所有 proc 都应该在 plsql 块中运行,即使出现错误,如 contiobion。

【问题讨论】:

  • " 我已经尝试在 plsql 块中进行异常处理" 有什么问题?
  • PROC 2 没有异常处理。它终止了块

标签: oracle stored-procedures plsql plsqldeveloper


【解决方案1】:

您可以在 pl/SQL 块中处理它

BEGIN
  PROC1;---has update Statement

  begin
    PROC2;--- has error like condition
  exception
    when others then
      -- do something
  end;

  PROC3;-- has update statement
END;
/

【讨论】:

  • 我故意没有在 PROC 2 中提到 plsql 块。
  • 不清楚你是什么,如果这不是你要找的
  • 我希望绕过 plsql 块中的错误,即使任何 procs 失败。PROC 2 失败但 PROC3 应该运行并触发更新语句
  • 那么我的例子有什么问题吗?您可以在 proc1 或 proc3 中或在我的 proc2 示例中的 proc 外部处理异常
  • 因此必须在所有过程中添加异常处理..好的,谢谢!!
【解决方案2】:

您必须在调用过程时处理异常。 PL/SQL 编译器一旦遇到错误就结束执行,无论是在调用过程还是被调用过程。所以你最终必须得到代码 -

BEGIN
    BEGIN
         PROC1;
    EXCEPTION
         WHEN OTHERS THEN
             NULL;
    END;
    BEGIN
         PROC2;
    EXCEPTION
         WHEN OTHERS THEN
             NULL;
    END;
    BEGIN
         PROC3;
    EXCEPTION
         WHEN OTHERS THEN
             NULL;
    END;
END;

【讨论】:

  • 我在这个 plsql 块中有超过 50 个 procs 所以我应该写 50 个异常块吗?
  • 我猜你别无选择。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2011-06-15
  • 2020-05-21
  • 2023-02-26
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多