PLsql 修改查询结果

在使用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;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章