选择更新锁与光标和批处理 DML 的交互



目前我的代码框架如下所示:

varchar rowidvariable[batchlimitcount][19];
stmt = "Select rowid from table_name where xx"
delstmt = "delete from table_name where rowid=:rowidvariable"
prepare delstatement using delstmt;
prepare cursor from stmt;
declare cursor from preparecursor;
open cursor;
while(1)
{
fetch cursor into rowidvariable;
somecondition {break};        
exec sql for fetchedCount 
execute delstatement using :rowidvariable;
commit;
} 

有人向我指出,使用SELECT FOR UPADATE锁定表将是确保 100% 锁定行并且在任何情况下(无论机会多么小(都不会更改行ROWID的方法。

但是,随着commit;释放锁以及我批量删除非常重要,因为有数百万条记录,推进建议的解决方案似乎存在挑战。

请告知是否有更好的选择。提前谢谢。

参考我之前的问题:链接

请注意,整个过程发生在oracle-pro-c中。

听起来问题是您必须删除数百万行,因此您希望以巴赫为单位进行

如果是这样,这可能对您有用 - 它将遍历并删除行并提交,这样您就不会用完撤消,也不必担心锁定行

begin
loop
delete from xx where yyy=zzz and rownum < 1000;
exit when sql%rowcount = 0;
commit;
end loop;
commit;
end;
/

相关内容

  • 没有找到相关文章