执行plsql块中的所有过程。即使proc内有错误

时间:2019-10-16 11:22:02

标签: oracle stored-procedures plsql plsqldeveloper

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

当执行plsql块时,在proc 2中,我保持了类似条件的错误。 因此,过程1成功运行并更新了表。 Proc 2引发一些错误由于proc 2中的错误,proc 3也无法运行

所以我想绕过条件错误

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

2)语用自主翻译。

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。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您必须在调用过程时处理异常。 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;