【问题标题】:Trigger to update same table data触发更新同一个表数据
【发布时间】:2013-07-15 20:08:15
【问题描述】:

我正在尝试编写一个触发器来更新相同的表数据:

表名:TEST_INSERTTIMETRIGGER

列:更改日期

以下是我尝试过的:

CREATE OR REPLACE TRIGGER TESTTRIGGER 
BEFORE
INSERT ON TEST_INSERTTIMETRIGGER 
REFERENCING NEW AS  NEW OLD AS OLD
for each row
declare
reqdate date=old.changedate;
BEGIN 
:new.changedate:=reqdate+1/24; 
END;

当我尝试使用插入语句时,空值正在插入到表名中。

insert into TEST_INSERTTIMETRIGGER (changedate) VALUES (to_date(SYSDATE, 'yyyy/mm/dd hh24:mi:ss'))

让我建议我哪里出错了。

【问题讨论】:

  • 除了尝试@schurik 答案之外,还要注意SYSDATE 已经是DATE 类型,所以在你的INSERT 中没有必要调用TO_DATE - insert into TEST_INSERTTIMETRIGGER (changedate) VALUES (SYSDATE) 将工作得很好。

标签: sql oracle triggers


【解决方案1】:

“旧”值在前插入触发器中全部设置为 NULL。你必须使用new.changedate

CREATE OR REPLACE TRIGGER TESTTRIGGER 
BEFORE
INSERT ON TEST_INSERTTIMETRIGGER 
REFERENCING NEW AS  NEW OLD AS OLD
for each row
BEGIN 
:new.changedate:=:new.changedate + 1/24; 
END;

【讨论】:

  • 它没有考虑旧的更改列值,我想在现有更改列值上增加一小时..并将其作为新列值放置..
  • 在插入触发器之前,“旧”值都设置为NULL---如何存储值
  • @RamuPasupuleti 在插入行之前没有存储任何值。你想改变什么价值?使用 befor insert 触发器,您只能更改刚刚插入的值
猜你喜欢
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2017-02-16
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多