oracle 把一条记录一个字段(code)取出来,同时又更新这条记录的另一个字段(status)?
表test字段(code,status),表logs_info字段(code)。目的:每次从test表里取出一条status=0的记录,把code字段插入到logs_in...
表test字段(code,status),表logs_info字段(code)。目的:每次从test表里取出一条status = 0的记录,把code字段插入到logs_info里,同时把这条记录的status改为1 status = 1.
怎么做?要考虑并发啊,select code from test where status =‘0’ rownum < 2。
update test set status = 1 where code =?
insert into logs_info(code) values (?);
确保每次取的不是同一条记录,能合成一条语句吗? 展开
怎么做?要考虑并发啊,select code from test where status =‘0’ rownum < 2。
update test set status = 1 where code =?
insert into logs_info(code) values (?);
确保每次取的不是同一条记录,能合成一条语句吗? 展开
1个回答
展开全部
问个问题:为什么要读取的时候做,插入的时候,只要status插入的是0,那么我就插入logs_info表,这样就可以用insert触发器解决了。只要有insert这个动作,那么就判断是不是status是不是0,如果是那么插入logs-info表。
另外再问一下,code的值是唯一的么?如果是,就是每一个code的值都是唯一的,那么直接
update test set status = 1 where code in (select code from test where status =‘0’ rownum < 2)就OK。
如果CODE的值不是唯一的,那么就写为
update test set status = 1 where code in (select code from test where status =‘0’ rownum < 2) and status=0
不过个人记得select没有触发器,也就是你没办法在查的同时修改,只能修改。
如果要修改,那么直接用关于update的触发器也行,触发条件是before update 动作是将select code from test where status =‘0’ rownum < 2赋值给一个游标去循环(for循环的隐性游标就行),然后利用这个游标,去insert,
insert into logs_info(code) valus ('v_aaa')
另外再问一下,code的值是唯一的么?如果是,就是每一个code的值都是唯一的,那么直接
update test set status = 1 where code in (select code from test where status =‘0’ rownum < 2)就OK。
如果CODE的值不是唯一的,那么就写为
update test set status = 1 where code in (select code from test where status =‘0’ rownum < 2) and status=0
不过个人记得select没有触发器,也就是你没办法在查的同时修改,只能修改。
如果要修改,那么直接用关于update的触发器也行,触发条件是before update 动作是将select code from test where status =‘0’ rownum < 2赋值给一个游标去循环(for循环的隐性游标就行),然后利用这个游标,去insert,
insert into logs_info(code) valus ('v_aaa')
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询