每行设置 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 触发器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在plsql中怎样创建表格?

Rails find_by new column

PLSQL设置显示的字符集及PLSQL的一些自身设置

PLSQL设置显示的字符集及PLSQL的一些自身设置

plsql中可不可以设置选中一行的快捷键

plsql如何设置查询结果格式化