PL/SQL - 在 FOR IN LOOP 中删除当前记录

PL/SQL - Delete current record in FOR IN LOOP

我想知道如何使用 FOR .. IN .. 循环删除记录

FOR REC IN (SELECT * FROM WORKLIST) LOOP
  GET_DATA(REC);
  --DELETE REC FROM WORKLIST
END LOOP;

GET_DATA 过程将每一行分解为多行,因此当前行已过时。我试图只删除当前记录。不确定在这种情况下是否可以使用 REC 对象。

遗憾的是,WORKLIST 没有任何键。

如果 WORKLIST 有主键,直接使用:

DELETE FROM WORKLIST WHERE <PK> = REC.<PK>

如果没有主键我会尝试:

DECLARE
  vTmp schema.worklist%rowtype;
BEGIN
  FOR rec IN (SELECT rowid, w.* FROM WORKLIST w) LOOP
    vTmp := null;
    vTmp.col1 := rec.col1;
    vTmp.col2 := rec.col2;
    -- And so on ...
    GET_DATE(vTmp);
    DELETE FROM WORKLIST WHERE rowid = rec.rowid;
  END LOOP;
END;

在光标上使用 current of :

DECLARE
CURSOR c1 IS 
    SELECT * from worklist FOR UPDATE <any column name>; 
BEGIN 
      open c1; 
      loop 
          fetch c1 into crow; 
          exit when c1%notfound;  
          DELETE FROM worklist WHERE CURRENT OF c1; 
      end loop;        
      COMMIT; 
      close c1; 
END;