DECLARE
v_row TBL%ROWTYPE;
BEGIN
DBMS_OUTPUT.ENABLE();
DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP);
SELECT *
INTO v_row
FROM TBL
WHERE ID=123
FOR UPDATE;
DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP);
DBMS_SESSION.SLEEP(12);
DBMS_OUTPUT.PUT_LINE(SYSTIMESTAMP);
-- COMMIT or ROLLBACK etc.
END;
/
3条答案
按热度按时间5tmbdcev1#
使用PL/SQL块并休眠:
fiddle(注意:毫不奇怪,小提琴有12秒的延迟,当你运行它)。
ndh0cuux2#
对于测试锁定,我只需要创建一个新会话(sqlplus或您最喜欢的DB客户端软件),然后在不提交的情况下进行更新。
当此会话持有行锁时,您可以使用您的应用建立自己的连接并呈现您要查找的行为。
如果您愿意,也可以锁定整个表:
然后提交或回滚以发布。
1tu0hz3e3#
通过DBeaver的工具栏切换到手动提交被证明是解决我的问题的最方便的解决方案。