每行设置 new.column 的 PLSQL 触发器不起作用
Posted
技术标签:
【中文标题】每行设置 new.column 的 PLSQL 触发器不起作用【英文标题】:PLSQL trigger for each row set new.column not working 【发布时间】:2019-04-24 15:17:06 【问题描述】:我正在尝试在插入所有主题值时计算表中的总值。 这是我的 plsql 代码:
CREATE OR REPLACE TRIGGER stud_marks before INSERT OR UPDATE ON student_report
FOR EACH ROW
BEGIN
set new.total := :new.sub1 + :new.sub2 + :new.sub3;
END;
这是我得到的错误:
Warning: Trigger created with compilation errors.
SQL> show error; Errors for TRIGGER STUD_MARKS:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/1 PL/SQL: SQL Statement ignored 2/5 PL/SQL: ORA-00922: missing or invalid option
【问题讨论】:
SET 不是 PL/SQL 命令。你只需要一个简单的任务::new.total := :new.sub1 + :new.sub2 + :new.sub3;
我尝试删除 SET 仍然出现错误SQL> show error Errors for TRIGGER STUD_REP: LINE/COL ERROR -------- ----------------------------------------------------------------- 2/1 PL/SQL: Statement ignored 2/1 PLS-00201: identifier 'NEW.TOTAL' must be declared
如果我声明总计,那么同样的错误也会出现
@Ajax 你缺少分号: :new.total := :new.sub1 + :new.sub2 + :new.sub3
是的。如果您查看我的代码,我会更正缺少的分号。我想我应该更明确地说明这一点。
【参考方案1】:
应该是
CREATE OR REPLACE TRIGGER stud_marks before INSERT OR UPDATE ON student_report
FOR EACH ROW
BEGIN
:new.total := :new.sub1 + :new.sub2 + :new.sub3;
END;
before insert ( :new=new inserted value :old=null);
before update ( :new=new updated value :old=old value);
【讨论】:
以上是关于每行设置 new.column 的 PLSQL 触发器不起作用的主要内容,如果未能解决你的问题,请参考以下文章