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 总结

pl sql developer怎么执行sql

为啥 SQL Developer 与 SQL Plus 中的 Oracle PL/SQL 响应时间存在差异?

Oracle Database 19c 技术架构

Oracle Database 19c 技术架构

PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决(代码