【发布时间】:2016-08-02 17:58:38
【问题描述】:
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 中的无效触发器规范:
我该如何解决?
【问题讨论】:
-
得到 PLS-00405: subquery not allowed in this context,不是 ORA-04079。您不能将子查询作为
if、you need to get the query result into a variable 的一部分。请参阅How do I ask a good question?。显示你正在运行的实际代码和你得到的错误将是一个好的开始。 -
我在 oracle 11g 中执行触发操作....然后它显示 ORA:04079 错误,而在 oracle SQL Developer 上它显示 PLS-00405:Subquery not allowed in this context.... .我现在该怎么办
-
与错误无关,但使用
max(receipt_no)不是一个好主意;这是better to use a sequence。 -
您在哪里看到 ORA-04079?您确定这不只是在早期编译尝试的屏幕上吗?您似乎建议“在 oracle 11g 中”意味着与 SQL Developer 不同的客户端,但那是数据库版本。如果您在两个客户端中遇到不同的行为,请告诉我们它们都是什么,包括您正在使用的版本。
-
我确信我仍然遇到同样的错误.....如果有办法发送屏幕截图我一定会发送它......
标签: oracle triggers oracle-apex