在使用oracle中,想要修改数据库数据时 ,正常情况下查询出表内容后,无法对表进行修改,可以使用以下两种方法进行修改!
方法一
select t.*,t.rowid from CLAIM_USER t; //增加 rowid 字段即可
方法二
select * from table for update //在后边增加 for update
但是方法二存在一个缺陷:
当修改表中数据,但是没有commit就关掉PL/SQL,下次再打开,执行带for update的sql语句,就会卡死,使用代码的 insertSelective 或者直接在数据库操作依然无法插入!!!!
针对方法二造成的卡死,解决方案如下:
第一步:查看锁表进程
select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid ;
第二步:解锁杀死锁表进程
alter system kill session '1155,39095';
//kill的数字即是,锁表进程中的SID和SERIAL字段的值,把所有的值全部杀掉即可