SQL触发器,当表中有新行插入时,则立即更新该行的某列值

test表中有四列,a,b,c,d。a为主键,当test表有新行插入的时候,则立即更新该新行的c列值为c+1。kgp742631的意见非常好,那如果在插入之前就更改值该怎... test表中有四列,a,b,c,d。a为主键,当test表有新行插入的时候,则立即更新该新行的c列值为c+1。
kgp742631的意见非常好,那如果在插入之前就更改值该怎么写呢?
展开
 我来答
kgp742631
推荐于2018-03-01 · 超过22用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:54.3万
展开全部
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  有空格。建议好好看看文档,大家帮你的只能是思想问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunchongkai505
2014-01-21 · TA获得超过1005个赞
知道小有建树答主
回答量:959
采纳率:0%
帮助的人:355万
展开全部
create or replace trigger test_trigger
before insert on test for each row
declare

begin
    :new.c:=:new.c+1;
end;

 这个触发器可以实现你要的功能,已经测试

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2014-01-20 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5111万
展开全部
create trigger tr_test
on test
after insert
as
update test set c=c+1 where a in(select a from inserted)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rolling0401
2014-01-20 · 超过20用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:49.1万
展开全部
用 instead of 触发器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式