Sql Oracle虚拟列或函数,用于在特定行上发现锁
Oracle是否提供类似虚拟列的内容来查看行的锁定状态 换句话说,我正在寻找一个像Sql Oracle虚拟列或函数,用于在特定行上发现锁,sql,oracle,locking,rows,Sql,Oracle,Locking,Rows,Oracle是否提供类似虚拟列的内容来查看行的锁定状态 换句话说,我正在寻找一个像LOCKED\u STATUS这样的属性来区分表的锁定行和未锁定行,就好像我们可以运行以下查询一样 不要与update skip locked的子句混淆,这使得查询不可编译,但它的出现只是为了强调我查找指定结果集的意图 with all_unlocked (LOCKED_STATUS, TITLE, ROW_ID) AS ( select 'N' AS LOCKED_STATUS, T.T
LOCKED\u STATUS
这样的属性来区分表的锁定行和未锁定行,就好像我们可以运行以下查询一样
不要与update skip locked的子句混淆,这使得查询不可编译,但它的出现只是为了强调我查找指定结果集的意图
with
all_unlocked (LOCKED_STATUS, TITLE, ROW_ID) AS (
select 'N' AS LOCKED_STATUS, T.TITLE, T.ROWID
from my_table T
for update skip locked /*DOES NOT COMPILE*/
),
all_locked (LOCKED_STATUS, TITLE, row_id) AS (
select 'Y' AS LOCKED_STATUS, A.TITLE, A.ROWID
from my_table A
where not exists (select null
from all_unlocked B
where B.row_id = A.rowid)
)
select * from all_unlocked
union all
select * from all_locked
好的,这是一个有点奇怪的要求,没有指定Oracle版本-如果我假设您使用的是受支持的版本,那么在11gr2中引入了关键字SKIP LOCKED
。您有上面提到的功能,那么您是否使用Oracle 11gr1或更高版本
如果在11gr2或更高版本上,您必须将其与SELECT。。。对于更新跳过锁定-您选择的任何内容都不会被锁定,并且您可以选择的任何不存在于该集中的内容都会根据定义被锁定,尽管这是一个相当大的移动目标,但它的可靠性/一致性将很差且不可重复。Nope,没有这样的内容。V$Lock保存锁定信息,但是有这样的要求似乎很奇怪,也不太可能是个好主意——你能解释一下为什么需要这样做吗?@Andrew,我想用乐观锁定对表进行批量更新,但不要等待锁定的行,只是跳过它们。另外,在一次更新过程中收集跳过的行也很好,即不运行查询来查找未更新的行。