ИСКЛЮЧЕНИЕ в неправильном месте?Где это лучшее место? - PullRequest
0 голосов
/ 09 октября 2018

Так что я пытаюсь создать записи, проходя курсором;однако я пытаюсь обработать исключение (DUP_VAL_ON_INDEX) в цикле.Это возможно?Если так, что я делаю не так?Ниже мой код:

create or replace Procedure EY IS
CURSOR c1 is 
  select ey_id , cycle_id
  from mvs v
 cross join cycle s
 l_var c1%ROWTYPE;
   BEGIN
      OPEN c1;
   LOOP
      BEGIN
        FETCH c1 into l_var;
        EXIT when c1%NOTFOUND;
      insert into EY (EY_id, cycle_id, create_dt, create_user_id)
      values (l_var.ey_id, l_var.cycle_id, trunc(sysdate), '1');
        EXCEPTION
            WHEN DUP_VAL_ON_INDEX THEN
            DBMS_OUTPUT.PUT_LINE('duplicate value');  
  END LOOP;
    close c1;
END EY;

Заранее спасибо

1 Ответ

0 голосов
/ 09 октября 2018

Да, это способ продолжить выполнение LOOP, если что-то происходит - заключить содержимое цикла в собственный блок BEGIN-EXCEPTION-END.

Ваш код, кажется, в порядке, но в нем отсутствует END утверждение для упомянутого внутреннего BEGIN-EXCEPTION- END блока, то есть

create or replace Procedure EY IS
  CURSOR c1 is 
    select ey_id , cycle_id
    from mvs v
    cross join cycle s
  l_var c1%ROWTYPE;
BEGIN
  OPEN c1;
  LOOP
    BEGIN
      FETCH c1 into l_var;
      EXIT when c1%NOTFOUND;
      insert into EY (EY_id, cycle_id, create_dt, create_user_id)
        values (l_var.ey_id, l_var.cycle_id, trunc(sysdate), '1');
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX THEN
      DBMS_OUTPUT.PUT_LINE('duplicate value');  
    end;                   --> you're missing this END
  END LOOP;
  close c1;
END EY;

Если вы правильно сделаете отступ в коде, легче определить виновника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...