【问题标题】:After Insert Update Trigger PL/SQL插入更新触发器 PL/SQL 后
【发布时间】:2012-05-27 14:49:29
【问题描述】:

我有一个Student 的表,还有一个varchar 类型的列status。我需要在此表上为此statusafter insert or update 进程设置值。我试图为此写一个Trigger。但我不能用作:new.status。它给出了Error: ORA-04084: cannot change NEW values for this trigger type。我该怎么做?

我的代码

create or replace
TRIGGER STUDENT_AIU_TRI 
AFTER INSERT OR UPDATE ON STUDENT
FOR EACH ROW 
DECLARE

v_status VARCHAR2(2);

BEGIN


  v_status := '1';

  select v_status into :NEW.status from dual;
END;

【问题讨论】:

  • @Bohemian 我更新了我的帖子并添加了我的代码。

标签: plsql triggers oracle11g


【解决方案1】:

如果要更改列中的值,则需要使用 BEFORE INSER OR UPDATET 触发器,而不是 AFTER INSERT OR UPDATE 触发器。为什么您认为需要使用AFTER INSERT OR UPDATE 触发器?

你也不需要局部变量或来自双重的SELECT

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT OR UPDATE ON student
  FOR EACH ROW
BEGIN
  :new.status := '1';
END;

【讨论】:

  • BEFORE INSERT OR UPDATE trigger 不会让我陷入回滚的任何问题吗?因为在这种情况下,status 列的值在插入或更新该记录中的其他列之前设置。在任何回滚的情况下,这不是让我陷入任何问题吗?
  • @Bishan - 我不确定我是否理解您提出的问题。触发器所做的更改,无论是 before 语句、after 语句,还是 before 或 after 行级触发器,都是总体事务的一部分。如果事务回滚,它们将被回滚。
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2021-05-01
  • 2018-10-03
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多