ORACLE PL/SQL:在 Oracle SQL Developer 中测试 SELECT FOR UPDATE
Posted
技术标签:
【中文标题】ORACLE PL/SQL:在 Oracle SQL Developer 中测试 SELECT FOR UPDATE【英文标题】:ORACLE PL/SQL: Testing SELECT FOR UPDATE in Oracle SQL Developer 【发布时间】:2011-01-12 20:29:34 【问题描述】:我们目前正在尝试实施 SELECT FOR UPDATE 以锁定行。如果我跑:
SELECT * FROM data where rowid = 'AAAQA5AAGAACNbEAA1' FOR UPDATE;
SELECT * FROM data where rowid = 'AAAQA5AAGAACNbEAA1' FOR UPDATE NOWAIT;
我在 ORACLE SQL Developer 中一无所获。这不应该给我一个错误吗?这与使用相同的用户ID有关吗?
【问题讨论】:
【参考方案1】:“我什么也得不到”是什么意思?您的意思是两个查询都没有返回任何行吗?如果是这样,这意味着表中没有具有该 ROWID 的行。您的意思是第一个(或第二个)语句永远不会返回吗?如果是这样,则会话被阻塞,等待获取锁。
锁由会话持有。如果两条语句在同一个会话中运行,则第二条语句将成功,因为第一条语句已经获得了锁。如果第二条语句在恰好由同一用户打开的不同会话中运行,则应生成该行已被另一个会话锁定的异常。
【讨论】:
我最初的想法是,因为我使用的是同一个连接,所以它只是覆盖。你已经确认了。谢谢。【参考方案2】:您请求锁定已在该事务中锁定的表。
您需要从不同的连接(即不同的事务)运行第二个 SELECT
【讨论】:
以上是关于ORACLE PL/SQL:在 Oracle SQL Developer 中测试 SELECT FOR UPDATE的主要内容,如果未能解决你的问题,请参考以下文章
Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结
为啥 SQL Developer 与 SQL Plus 中的 Oracle PL/SQL 响应时间存在差异?
PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决(代码