ORACLE PL/SQL:在Oracle SQL Developer中测试SELECT FOR UPDATE

jlr*_*lin 3 oracle plsql oracle10g

我们目前正在尝试实现SELECT FOR UPDATE以锁定行.如果我跑:

SELECT * FROM data where rowid = 'AAAQA5AAGAACNbEAA1' FOR UPDATE;
SELECT * FROM data where rowid = 'AAAQA5AAGAACNbEAA1' FOR UPDATE NOWAIT;
Run Code Online (Sandbox Code Playgroud)

我在ORACLE SQL Developer中得不到任何回报.这不应该给我一个错误吗?这与使用相同的用户ID有关吗?

Jus*_*ave 5

你是什​​么意思"我什么也得不回"?你是说这两个查询都没有返回任何行吗?如果是这样,那意味着表中没有具有该ROWID的行.你的意思是第一个(或第二个)陈述永远不会回来吗?如果是,则会阻止会话等待获取锁定.

锁定由会话持有.如果两个语句在同一会话中运行,则第二个语句将成功,因为第一个语句已获得锁定.如果第二个语句在恰好由同一用户打开的另一个会话中运行,则应生成该行已被另一个会话锁定的异常.