Oracle删除已删除锁定

时间:2017-09-12 11:47:14

标签: oracle sql-delete dml

oracle是否允许从具有某些条件的表中删除行并跳过锁定的一次

DELETE from t 
 WHERE t.id IN (SELECT id 
                  FROM t 
                 WHERE id in ('1','2') 
                   FOR UPDATE SKIP LOCKED )

例如,id 2被其他会话锁定,删除脚本应该跳过该行

上述查询始终 失败,错误

  

ORA-00907:缺少右括号

版本:Oracle 11G XE

2 个答案:

答案 0 :(得分:2)

FOR UPDATE子句仅对顶级SQL语句有效,而不对子查询有效。

http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10002.htm#SQLRF55370

答案 1 :(得分:1)

跟进Jeffrey的回答,我相信这个子句旨在用于PL / SQL块。所以你可以试试这个,例如:

begin
  for r in (select rowid as rid from t for update skip locked)
  loop
    delete from t where rowid = r.rid;
  end loop;
end;
/