Выполните всю процедуру в блоке plsql. Даже если в proc есть ошибка внутри - PullRequest
0 голосов
/ 16 октября 2019

У меня есть 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) ВСЕ процесс должен запускаться в блоке plsql даже при ошибке, подобной contiobion.

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Вы должны обрабатывать исключения при вызове процедур. Компилятор 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;
0 голосов
/ 16 октября 2019

вы можете обработать это в 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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...