日期:2014-05-17  浏览次数:20863 次

使用for update更新删除一个字段中的值出现触发器出错
在ORACLE中,执行如下语句删除一个字段中的值时出现触发器出错的错误,出现这种情况的原因有哪些?
select a.cover_direction from c_btssitemanager a
where a.cover_direction is not null
for update



------解决方案--------------------
使用for update语句会锁定特定的行,因为你后面加了where a.cover_direction is not null
,所以满足条件的都被锁了,你删除的字段为null的值,当然会报错。

因为当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。
------解决方案--------------------
探讨
使用for update语句会锁定特定的行,因为你后面加了where a.cover_direction is not null
,所以满足条件的都被锁了,你删除的字段为null的值,当然会报错。

因为当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。

------解决方案--------------------
嗯啊,程式中不要亂用這個,不然會影響其他用戶,別人會卡在那裡,以為死機了什麽的。
探讨

使用for update语句会锁定特定的行,因为你后面加了where a.cover_direction is not null
,所以满足条件的都被锁了,你删除的字段为null的值,当然会报错。

因为当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。

------解决方案--------------------
嗯啊,程式中不要亂用這個,不然會影響其他用戶,別人會卡在那裡,以為死機了什麽的。
探讨

使用for update语句会锁定特定的行,因为你后面加了where a.cover_direction is not null
,所以满足条件的都被锁了,你删除的字段为null的值,当然会报错。

因为当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。