【发布时间】:2012-11-12 17:21:44
【问题描述】:
我有电影行政桌
movieexec与列
我想创建一个计算平均净值的触发器,如果它超过一定数量,比如 400000,则应该无法进一步插入,并且应该显示错误消息。(name varchar2(20), address varchar2(20), cert# number(10), networth float)
我实现了以下代码:
CREATE OR REPLACE TRIGGER pronet
AFTER INSERT
ON movieexec
FOR EACH ROW
DECLARE netavg float;
BEGIN
SELECT AVG(networth) INTO netavg FROM movieexec;
IF(netavg>400000) THEN
RAISE_APPLICATION_ERROR(-20000,'average limit reached, cannot insert');
ENDIF;
END
但出现以下错误
ERROR at line 7: PLS-00103: Encountered the symbol ";" when expecting one of the following:
if
5. DECLARE netavg float;
6. BEGIN
7. **SELECT AVG(networth) INTO netavg FROM movieexec;**
8. IF(netavg>400000) THEN
9. RAISE_APPLICATION_ERROR(-20000,'average limit reached, cannot insert');
请提供帮助。
【问题讨论】:
-
错误中的行号是指PL/SQL 块,而不是整个触发器语句。所以这是它不喜欢的最后一个
end,而不是select。那是因为上一行endif;格式不正确 - 缺少一个空格。 -
触发器创建成功,但是当我插入movieexec时出现以下错误..... ORA-04091:表SYSTEM.MOVIEEXEC正在变异,触发器/函数可能看不到它。 ORA-06512:在“SYSTEM.PRONET”,第 4 行 ORA-04088:执行触发器“SYSTEM.PRONET”时出错 – Gautham 2 分钟前编辑
标签: sql oracle triggers database