gpt4 book ai didi

oracle - 显示 Oracle 中锁定的行

转载 作者:行者123 更新时间:2023-12-02 04:00:16 25 4
gpt4 key购买 nike

使用Oracle,在执行select语句时是否可以指示哪些行当前被锁定(哪些行没有)(我不想锁定任何行,只是能够显示哪些行被锁定)?

例如,一个伪列将返回该行的锁/事务:
SELECT 锁名 FROM emp;

最佳答案

你可以做的一件事是这样 - 尽管它不是非常有效,所以我不想将它用于大型数据集。创建一个行级函数来尝试锁定该行。如果失败,则该行已被锁定

    CREATE OR REPLACE FUNCTION is_row_locked (v_rowid ROWID, table_name VARCHAR2)
RETURN varchar2
IS
x NUMBER;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE 'Begin
Select 1 into :x from '
|| table_name
|| ' where rowid =:v_rowid for update nowait;
Exception
When Others Then
:x:=null;
End;'
USING OUT x, v_rowid;

-- now release the lock if we got it.
ROLLBACK;

IF x = 1
THEN
RETURN 'N';
ELSIF x IS NULL
THEN
RETURN 'Y';
END IF;
END;
/

然后你就可以

Select field1, field2, is_row_locked(rowid, 'MYTABLE') from mytable;

它会起作用,但它既不漂亮也不高效。

事实上,它确实具有一种可取之处 - 即使您对链接文档中所需的各种 v$ 表没有选择权限,它也能工作。不过,如果您有权限,一定要走另一条路。

关于oracle - 显示 Oracle 中锁定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com