我在第1节中有这个查询: 从x中选择*,其中x.id = 625用于更新nowait; 我在会话2中有另一个查询: 更新x设置x.code = 0,其中id = 625; 我不希望会话2等待会话1提交或回滚。 我想将错误提交到会话2,直到会话1未提交。 我的问题是会话2等待会话1释放资源。
答案 0 :(得分:3)
在会话2中,您需要发出另一个SELECT FOR UPDATE NOWAIT
以获取记录上的锁定,然后在同一事务中进行更新。
SELECT FOR UPDATE
语句必须使用与WHERE
相同的UPDATE
条件才能锁定您要更新的相同记录。
如果记录已被锁定,则第一个SELECT FOR UPDATE
投掷:
ORA-00054:资源繁忙并在指定NOWAIT或超时过期时获取
SELECT 1 FROM x WHERE id = 625 FOR UPDATE NOWAIT;
update x set x.code = 0 where id = 625 ;