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;
我想知道如何使用 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;