Oracle-更新触发触发器的同一个表

Oracle-更新触发触发器的同一个表,oracle,triggers,Oracle,Triggers,我有一个包含以下列的表temp_table 身份证号码, 名字叫瓦查尔, 密码varchar, pwd_变更_日期时间戳 我只想在密码列更改时在pwd_change_date列中捕获时间戳。 所以基本上我想在触发器中使用update语句来更新同一记录的pwd_change_date列中的时间戳值 范例 当为一个用户更改密码时,我想为同一条记录捕获pwd_change_date中的时间戳值 我在临时表上尝试了密码的插入前和插入后,但出现了变异错误。Oracle是否允许更新触发触发器的同一行/表?您

我有一个包含以下列的表temp_table 身份证号码, 名字叫瓦查尔, 密码varchar, pwd_变更_日期时间戳

我只想在密码列更改时在pwd_change_date列中捕获时间戳。 所以基本上我想在触发器中使用update语句来更新同一记录的pwd_change_date列中的时间戳值

范例 当为一个用户更改密码时,我想为同一条记录捕获pwd_change_date中的时间戳值


我在临时表上尝试了密码的插入前和插入后,但出现了变异错误。Oracle是否允许更新触发触发器的同一行/表?

您不需要再次更新该表;您可以在插入数据之前使用插入前行级别触发器修改数据,例如:

create trigger trig_pwd_date
before insert or update on temp_table
for each row
when (old.password is null and new.password is not null or new.password != old.password)
begin
  :new.pwd_change_date := systimestamp;
end;
/

这使用
new
old
来确定密码值是否已更改;以及
new
相关名称,用于将系统时间分配给伪记录中的字段,该字段在插入完成时成为列值


希望您没有在表中存储纯文本密码。

SQL>create table temp_table(密码varchar2(50),pwd_change_日期时间戳)

表已创建

SQL>创建触发器触发日期 在插入或更新临时表之前 每行 当(old.password为null,new.password不为null或new.password!=old.password) 开始 :new.pwd\u change\u date:=systimestamp; 结束;234567
八,/

已创建触发器。

SQL>设置时间 15:28:42 SQL>插入临时表值('23456',系统日期)

创建了1行

15:29:01 SQL>commit

提交完成

15:29:09 SQL>从临时表中选择*

密码 更改日期 12345 21-SEP-20 03.28.02.370377下午

23456
9月21日20日03.29.01.478017下午

加油!!谢谢你的指导。复习:-请格式化你的代码并解释它与其他答案的区别。