Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql 插入更新触发器PL/SQL后_Plsql_Triggers_Oracle11g - Fatal编程技术网

Plsql 插入更新触发器PL/SQL后

Plsql 插入更新触发器PL/SQL后,plsql,triggers,oracle11g,Plsql,Triggers,Oracle11g,我有一个表作为Student,还有一个varchar类型列作为status。在插入或更新此表后,我需要将值设置为此状态列。我试图为此编写一个触发器。但是我不能使用as:new.status。它给出错误:ORA-04084:无法更改此触发器类型的新值。我怎么能这样做 我的代码 create or replace TRIGGER STUDENT_AIU_TRI AFTER INSERT OR UPDATE ON STUDENT FOR EACH ROW DECLARE v_status VAR

我有一个表作为
Student
,还有一个
varchar
类型列作为
status
。在插入或更新此表后,我需要将值设置为此
状态
。我试图为此编写一个
触发器
。但是我不能使用as
:new.status
。它给出
错误:ORA-04084:无法更改此触发器类型的新值
。我怎么能这样做

我的代码

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;

如果要更改列中的值,则需要在INSER或UPDATET之前使用
触发器,而不是在INSERT或UPDATE之后使用
触发器。为什么您认为在插入或更新触发器后需要使用

您也不需要使用局部变量,也不需要从dual中选择

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

@波希米亚我已经更新了我的帖子并添加了我的代码。在插入或更新触发器之前,
是否会让我在回滚中遇到任何问题?因为在这种情况下,在插入或更新该记录中的其他列之前设置的
status
列的值。在任何情况下,回退,这不是让我陷入任何问题吗?@Bishan-我不确定我是否理解你问的问题。触发器所做的更改,无论是before语句、after语句还是before或after行级触发器,都是总体事务的一部分。如果事务回滚,它们将回滚。