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