Oracle是否提供诸如虚拟列之类的功能来查看行的锁定状态?
换句话说,我正在寻找一个LOCKED_STATUS
之类的属性来区分表的锁定行和未锁定行,就像我们可以运行以下查询一样。
不要与for 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
答案 0 :(得分:1)
好吧,这有点奇怪,没有指定Oracle版本-如果我假设您使用的是受支持的版本,则在11gr2中引入了关键字function ApiCallFunction(Datatext, ApiName, FunctionName) {
$.ajax({
url: Apiurl + ApiName,
type: "POST",
data: Datatext,
contentType: "application/json",
dataType: "json",
success: function (data) {
window[FunctionName].apply(this,data);
},
error: function (error) {
jsonValue = jQuery.parseJSON(error.responseText);
ErrorWhileSave(jsonValue.Message);
},
failure: function (response) {
ErrorWhileSave("");
}
});
}
。您上面有,所以您使用的是Oracle 11gr1或更早的版本?
如果在11gr2或更高版本上,则必须将其与SELECT ... FOR UPDATE SKIP LOCKED结合使用-虽然您选择的任何内容均未锁定,但您可以选择的任何内容均未定义锁定,尽管那是一个相当大的移动目标被击中-它的可靠性/一致性将很差且不可重复。