如何插入nextval来触发for循环内部

时间:2013-03-22 08:47:14

标签: plsql unique-constraint nextval database-trigger

这是一个触发器代码,它有一个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:

有关

2 个答案:

答案 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;

分享并享受。