因此,我试图通过游标循环创建条目;但是,我正在尝试处理循环内的异常(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;
预先感谢
答案 0 :(得分:2)
是的,这是在发生某些情况时继续执行LOOP
的方法-将循环内容包含在其自己的BEGIN-EXCEPTION-END
块中。
您的代码似乎还可以,但是它缺少所提及的内部END
END 块的BEGIN-EXCEPTION-
语句,即
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;
如果正确缩进代码,则更容易发现罪魁祸首。