Oracle数据库UPDATE语句执行后如何返回变更记录的主键

@  2017-03-19 06:08:49
RT
eg:有如下表格
--------------------------------
id name status
--------------------------------
1 test1 1
2 test2 1
3 test2 1
4 test2 1
5 test2 1
6 test2 1
--------------------------分割线--------------------------
以下为SQL语句
UPDATE TABNAME SET name='zhangsan' WHERE status = 1
以上语句执行后影响行数为6行,现在想问一下各位大神,如何能获取到这6行的主键ID(1,2,3,4,5,6)
先谢过各位
...全文
957 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2017-03-21
  • 打赏
  • 举报
回复

SQL> 
SQL> create table test(id int, name varchar(10));
Table created
SQL> begin
  2      insert into test values(1,'aaa');
  3      insert into test values(2,'bbb');
  4      insert into test values(3,'ccc');
  5      insert into test values(4,'ddd');
  6  end;
  7  /
PL/SQL procedure successfully completed
SQL> set serverout on ;
SQL> declare
  2      type tlist is table of integer index by pls_integer;
  3      l tlist ;
  4      v_id varchar(10);
  5  begin
  6      update test set name = name || 'XXX' returning id bulk collect into l;
  7      for x in 1..l.count loop
  8          dbms_output.put_line(l(x));
  9      end loop;
 10  end;
 11  /
1
2
3
4
PL/SQL procedure successfully completed
SQL> drop table test purge;
Table dropped

SQL> 
程序员-缘 2017-03-21
  • 打赏
  • 举报
回复
顶666666
camelw 2017-03-19
  • 打赏
  • 举报
回复
查询出要更新的数据插入到一个表中存放,这个过程可以放到触发器里
camelw 2017-03-19
  • 打赏
  • 举报
回复
难道你想一个update执行完了还能返回记录出来么,要显示记录还是得用select,并且先查询再更新,或者把查询后的结果集插入到表中,然后进行更新操作
DLx2ChEnGYt 2017-03-19
  • 打赏
  • 举报
回复
顶一下..
@  2017-03-19
  • 打赏
  • 举报
回复
引用 2 楼 www1990xxx 的回复:
select id from TABNAME WHERE status = 1 and name<>'zhangsan' 这就是需要变更的记录
这样不是还得在update只有还得执行一句查询sql吗,如果并发高,这样使用这中修改后的值作为查询条件一定会出问题的
camelw 2017-03-19
  • 打赏
  • 举报
回复
select id from TABNAME WHERE status = 1 and name<>'zhangsan' 这就是需要变更的记录
@&nbsp; 2017-03-19
  • 打赏
  • 举报
回复
对了,在不使用存储过程的情况下,只用SQL语句能否实现呢??

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧