在使用plsql查询出数据后,点击左上角的锁图标,弹出提示信息:these query results are not updateable. Include the ROWID to get updateable results. 该提示对应的查询语句为 select * from
tablename
方法一
修改查询语句为select t.*, t.rowid from [tablename] t
点击左上方的锁,时可以发现已经不在弹出提示,并且编辑器也有了变化,这是我们就可以开始编辑数据了。
修改需要修改的数据,然后点做上方的绿色的勾完成编辑,然后再点锁,锁定编辑
编辑完成后别忘了点击commit提交修改哦,否则修改是不生效的。
方法二
修改查询语句为select * from [tablename] for update
点击左上方的锁,时可以发现已经不在弹出提示,并且编辑器也有了变化,这是我们就可以开始编辑数据了。
修改需要修改的数据,然后点做上方的绿色的勾完成编辑,然后再点锁,锁定编辑
编辑完成后别忘了点击commit提交修改哦,否则修改是不生效的。
注意:使用for update修改数据后,必须点击提交或者回滚,不然会造成当前数据锁死,在生产环境中,会造成后面的数据库访问杜塞,进而卡死整个系统的严重事故,慎用!!建议用方法1修改数据!
oracle for update使用注意事项
今日在使用 oracle for update sql命令的时候,因为疏忽,在PLSQL中没有提交sql,导致生产线卡死20分钟,血淋淋的教训啊,
现在,特别注意,运行select...for update后 一定要记得把这个,提交或者回滚,点了,不然数据库直接锁死!!
再附上查询哪个用户锁定哪张表的sql:
--查看被锁的表
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
--查看那个用户那个进程照成死锁
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;