SQL触发器,当表中有新行插入时,则立即更新该行的某列值
test表中有四列,a,b,c,d。a为主键,当test表有新行插入的时候,则立即更新该新行的c列值为c+1。kgp742631的意见非常好,那如果在插入之前就更改值该怎...
test表中有四列,a,b,c,d。a为主键,当test表有新行插入的时候,则立即更新该新行的c列值为c+1。
kgp742631的意见非常好,那如果在插入之前就更改值该怎么写呢? 展开
kgp742631的意见非常好,那如果在插入之前就更改值该怎么写呢? 展开
4个回答
展开全部
create or replace trigger tr_test before insert on test for each rowdeclarebegin :new.c:= :new:c+1;end ;
楼上的回答不正确,因为在插入之后(未提交)再次进行修改本行记录,会提示错误。如果非要在插入之后在修改的话,那么可以用自治事务来实现,但是我还是觉得在插入之前更新插入的值更好,不用插入、修改。
楼上的回答不正确,因为在插入之后(未提交)再次进行修改本行记录,会提示错误。如果非要在插入之后在修改的话,那么可以用自治事务来实现,但是我还是觉得在插入之前更新插入的值更好,不用插入、修改。
追问
kgp742631你的意见非常好,在插入之前就更改值确实更好。但是你的语句不能成功的运行,会出现错误“关键字OR附近有语法错误”
追答
因为快下班了,代码手动输入了,rowdeclarebegin 中间有空格 row、declare、begin 有空格。建议好好看看文档,大家帮你的只能是思想问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create or replace trigger test_trigger
before insert on test for each row
declare
begin
:new.c:=:new.c+1;
end;
这个触发器可以实现你要的功能,已经测试
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create trigger tr_test
on test
after insert
as
update test set c=c+1 where a in(select a from inserted)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用 instead of 触发器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询