ORA-04079: 触发器规范无效

ORA-04079:invalid trigger specification

create or replace trigger fineCalc
AFTER UPDATE ON book_issue
for each row
when ((new.date_of_return-old.date_of_issue)>7) 
declare 
  rcpt_no  number;
  s_id  char(10);
begin
  if :old.card_id in (select card_id from STUDENT_BOOK_ISSUE)
  then
    select max(receipt_no) into rcpt_no from fine;
    select student_id into s_id from STUDENT_BOOK_ISSUE sbi where sbi.card_id=:old.card_id;

    insert into fine values( rcpt_no+1,((:NEW.date_of_return-:OLD.date_of_issue-7)*5),s_id);
  end if;
end;

这得到 ORA-04079:Apex 的 SQL Workshop 中无效的触发器规范:

我该如何解决?

按照 Alex 的建议,将 if 条件移到外面再试一次。

create or replace trigger fineCalc
AFTER UPDATE ON book_issue
for each row
when ((new.date_of_return-old.date_of_issue)>7) 
declare 
  rcpt_no  number;
  s_id  char(10);
  v_count number;
begin
  select count(*) into v_count from STUDENT_BOOK_ISSUE where card_id=:old.card_id;
  if v_count > 0
  then
    select max(receipt_no) into rcpt_no from fine;
    select student_id into s_id from STUDENT_BOOK_ISSUE sbi where sbi.card_id=:old.card_id;
    insert into fine values( rcpt_no+1,((:NEW.date_of_return-:OLD.date_of_issue-7)*5),s_id);
  end if;
end;