首页 > 解决方案 > 执行 plsql 块中的所有过程。即使在 proc 内部有错误

问题描述

我有 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 个 procs 都应该更新。

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

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

标签: oraclestored-proceduresplsqlplsqldeveloper

解决方案


您可以在 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;
/

推荐阅读