Sql 触发器执行期间出错ORA-06512和ORA-04088

Sql 触发器执行期间出错ORA-06512和ORA-04088,sql,oracle,triggers,Sql,Oracle,Triggers,我已经创建了一个触发器,这样用户就不能输入犯罪记录,如果犯罪记录表中不存在的话。我确实收到了“犯罪编号:”| |:new.Crime| | | | NO | |“不在犯罪表中”错误 但是,我也收到ORA-06512:C3405016.EVIDENCE_FK,第8行ORA-04088:trigger'C3405016.EVIDENCE_FK'执行期间出错 Create or replace trigger Evidence_fk before insert or update of CRIME_N

我已经创建了一个触发器,这样用户就不能输入犯罪记录,如果犯罪记录表中不存在的话。我确实收到了“犯罪编号:”| |:new.Crime| | | | NO | |“不在犯罪表中”错误

但是,我也收到ORA-06512:C3405016.EVIDENCE_FK,第8行ORA-04088:trigger'C3405016.EVIDENCE_FK'执行期间出错

Create or replace trigger Evidence_fk
before insert or update of CRIME_NO
on Evidence
for each row
declare
         dummy   integer;
begin
         select count(*)    into dummy
         from Evidence
         where CRIME_NO = :new.CRIME_NO;
     if (dummy < 1) /* i.e. no corresponding Crime_No in Crime */
             then raise_application_error(-20002,
             'Crime Number: '|| :new.CRIME_NO || ' not in the Crime table');
         end if;
end;

ORA-20002:犯罪编号:20不在犯罪表ORA-06512:在C3405016.证据\u FK,第8行ORA-04088:执行触发器“C3405016.证据\u FK”时出错

这是它应该做的-您得到了整个异常堆栈。但是为什么你要用一个触发器,而不是一个实际的外键约束呢?我是一名学生,作为我课程的一部分,我必须实现两个触发器,我知道我可以使用一个约束,但我也可以使用一个触发器并为此获得分数。
Create or replace trigger Evidence_fk
before insert or update of CRIME_NO
on Evidence
for each row
declare
         dummy   integer;
begin
         select count(*)    into dummy
         from Evidence
         where CRIME_NO = :new.CRIME_NO;
     if (dummy < 1) /* i.e. no corresponding Crime_No in Crime */
             then raise_application_error(-20002,
             'Crime Number: '|| :new.CRIME_NO || ' not in the Crime table');
         end if;
end;