【发布时间】:2019-04-26 13:05:58
【问题描述】:
我已经为一个表创建了一个触发器,但我想计算百分比并将其插入另一个表中,为此我需要创建另一个触发器,这是我从中获取总值的触发器:
CREATE OR REPLACE TRIGGER stud_rep
BEFORE DELETE OR INSERT OR UPDATE ON student_report
FOR EACH ROW
BEGIN
:new.total := :new.sub1 + :new.sub2 + :new.sub3;
END;
/
这是我要计算和存储来自 student_report 表的百分比和 sid 的另一个表。
SQL> DESC students_percentage;
Name Null? Type
----------------------------------------- -------- ----------------------------
SID NUMBER(3)
TOTAL_PER NUMBER(2)
这是我尝试过的代码:
SQL> CREATE TRIGGER update_percentage
2 ON item
3 AFTER UPDATE,INSERT
4 AS
5 BEGIN
6 INSERT INTO students_percentage VALUES(SELECT sid, total FROM student_report);
7 END;
8 /
ON item
*
ERROR at line 2:
ORA-04071: missing BEFORE, AFTER or INSTEAD OF keyword
SQL> SHOW ERROR;
No errors.
【问题讨论】:
-
请检查触发器规范的语法。您应该首先拥有
after,然后是on。之后,您将在插入语句中遇到另一个错误。此外,此触发器是一个 after 语句触发器,它将插入所有总数,而无需先清除表且不过滤,在您所做的每一次修改中,因此一旦您让触发器工作,它会迅速向item表发送垃圾邮件有大量重复数据。 -
进一步观察,您正在使用来自
student_report的数据更新students_percentage,来自item的触发器。为什么选择item?
标签: plsql