这是一个触发器代码,它有一个for循环。当触发器被触发(INSERT OR UPDATE)时,另一个表数据必须包含它是MICL_SUP
OPEN projMgrsCursor;
LOOP
FETCH projMgrsCursor INTO projMgr;
select micl_sup_id_seq.nextval into SUPID from dual;
insert into MICL_SUP VALUES ((SUPID), (SELECT SYSDATE FROM DUAL), :NEW.ENTRYADDEDBY_EMP_NO, 3000, 0,projMgr, NULL,:NEW.EMP_NO);
END LOOP;
CLOSE projMgrsCursor;
这是表格结构。 Sup_ID
主要和唯一密钥。我不能对表结构做任何改变
SUP_ID -primary key
ASSIGNED_DATE
ASSIGNED_BY_EMP_NO
AMOUNT_LIMIT
IS_OVVERRIDDEN
SUP_EMP_NO
RTD_EMP
EMP_NO
要输入sup_ID我使用select micl_sup_id_seq.nextval into SUPID from dual;
但是当我运行这段代码时出现错误"RA-00001: unique constraint violated"
(这不是编译错误)有没有其他方法可以添加sup_ID?哪里出错了?请帮助我,因为这个触发器我将失去工作,我是一个新手
提前谢谢需要紧急帮助
此问题与此触发器PlSQL trigger error ORA-0000 ORA-06512:
答案 0 :(得分:2)
为什么不在游标中包含micl_sup_id_seq.nextval
的计算?
cursor projMgrsCursor is
select b.BU_MEMBER_ID, micl_sup_id_seq.nextval SUPID
from ...
答案 1 :(得分:0)
尝试将代码重写为:
DECLARE
nSupid NUMBER;
projMgr VARCHAR2(32767);
BEGIN
OPEN projMgrsCursor;
LOOP
FETCH projMgrsCursor INTO projMgr;
EXIT WHEN projMgrsCursor%NOTFOUND;
select micl_sup_id_seq.nextval into nSUPID from dual;
insert into MICL_SUP
(SUPID, ASSIGNED_DATE, ASSIGNED_BY_EMP_NO, AMOUNT_LIMIT,
IS_OVERRIDDEN, SUP_EMP_NO, RTD_EMP, EMP_NO)
VALUES
(nSupid, SYSDATE, :NEW.ENTRYADDEDBY_EMP_NO, 3000,
0, projMgr, NULL, :NEW.EMP_NO);
END LOOP;
CLOSE projMgrsCursor;
DBMS_OUTPUT.PUT_LINE('Successful completion');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Exception: ' || SQLCODE || ' ' || SQLERRM);
RAISE;
END;
分享并享受。