PLSQL触发错误ORA-0000 ORA-06512:(PlSQL trigger error O

2019-10-17 21:11发布

create or replace 
TRIGGER "SUP" AFTER INSERT ON "EMP_REPORT" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
DECLARE

  miclaim_supervisor_count number;
  employee_company_code VARCHAR2(10);
  employee_businessunit number;
  projMgrs NUMBER;
  supId NUMBER;

  cursor  projMgrsCursor is select b.BU_MEMBER_ID
  from BU_MEMBER b, EMP_SUB_DIV s
  where s.EMP_NO = :NEW.EMP_NO
  and s.SUB_DIVISION_CODE = '01' and s.DIV_CODE = '2'
  and b.BU_ID IN (select BU_ID from BU_MEMBER where BU_MEMBER_ID = :NEW.EMP_NO);


BEGIN
        delete from MICL_SUPERVISORS where EMP_NO = :NEW.EMP_NO and IS_OVVERRIDDEN = 0;
        select count(*) into miclaim_supervisor_count from MICL_SUPERVISORS where EMP_NO = :NEW.EMP_NO and IS_OVVERRIDDEN = 1;
        select COMPANY_CODE into employee_company_code from  EMPLOYEE_MASTER where EMP_NO = :NEW.EMP_NO;


    projMgrs := 0;

if (employee_company_code ='F')then 

  OPEN  projMgrsCursor;
    LOOP

     select micl_sup_id_seq.nextval into  supId from dual;
    FETCH projMgrsCursor INTO projMgrs;
    EXIT WHEN projMgrsCursor%NOTFOUND;

    insert into SUP VALUES ((supId), (SELECT SYSDATE FROM DUAL), :NEW.ENTRYADDEDBY_EMP_NO, 3000, 0,projMgrs, NULL,:NEW.EMP_NO);
    END LOOP;   

  CLOSE projMgrsCursor;
else
    if(miclaim_supervisor_count IS NULL or miclaim_supervisor_count<1) then
    insert into SUP VALUES ((:NEW.ID), (SELECT SYSDATE FROM DUAL), :NEW.ENTRYADDEDBY_EMP_NO, 3000, 0, :NEW.SUP_EMP_NO, NULL,:NEW.EMP_NO);
    end if;
end if;

END;

我一个星期创造了这个触发去,但没有编译错误但是当我进入一个记录EMP_REPORT它弹出一个错误味精说

 *INSERT INTO"EMP_REPORT" (ID, ADDEDDATE, ENTRYADDEDBY_EMP_NO, SUP_EMP_NO, EMP_NO) VALUES ('71', TO_TIMESTAMP('19-MAR-13 09.55.57.983000000 AM', 'DD-MON-RR HH.MI.SS.FF AM'), '81', '841', '5295')
ORA-00001: unique constraint (SYS_C0023329) violated
ORA-06512: at line 1

One error saving changes to table  "EMP_REPORT":
Row 51: ORA-00001: unique constraint (SYS_C0023329) violated
ORA-06512: at line 1* 

我找不出哪里出了错。 请帮助我 :(

请注意,我不能删除约束和主键

Answer 1:

你肯定的是,在触发发生错误? 它看起来对我来说,这可能是失败的是一进EMP_REPORT的INSERT - 可能是因为已经有一个在EMP_REPORT一排ID =“71”。 这将是有益的,如果你能确定是什么表SYS_C0023329。

然而,假设正被触发生成的消息 - 我只看到你的触发两个插入,无论插入SUP表,所以这个问题必须从这些刀片的一个到来。 或

  1. 还有已经在SUP一排具有键值(你不显示的列在打击SUP你的INSERT语句中的名字,所以我不知道该字段的名称可能是)比MICL_SUP_ID_SEQ.NEXTVAL的电流值, 要么

  2. 有一个在SUP一排等于你在第二个INSERT所提供的新EMP_REPORT.ID领域的键值。

这第二个问题,从一个表(EMP_REPORT)作为第二个表(SUP)键值提供的关键价值似乎有点怀疑我了,我建议首先寻找在那里。 我想你会想从MICL_SUP_ID_SEQ得到的值在SUP表来使用。

要验证该问题是由一个INSERT INTO SUP造成的,您可以尝试执行以下操作:

SELECT *
  FROM ALL_CONSTRAINTS c
  WHERE c.CONSTRAINT_NAME = 'SYS_C0023329';

这会告诉你的约束是什么表。

分享和享受。



文章来源: PlSQL trigger error ORA-0000 ORA-06512: