在下面的 PL/SQL 代码中,TABLE_ONE 包含表名 tname 、列名 cname 和 rowid rid。For 循环从 TABLE_ONE 获取记录并更新表 tname 中的列 cname 以获取行 ID 为 rid 的记录。但是如果 tname 中要更新的记录被锁定,那么 for 循环就会卡住,并且不会处理来自 TABLE_ONE 的更多记录。理想情况下,脚本忽略更新失败的记录并继续进行。请告知可能是什么问题。
BEGIN
FOR c IN (SELECT * FROM TABLE_ONE a )
LOOP
DECLARE
TNAME varchar2(30);
CNAME varchar2(30);
RID ROWID;
X number;
updt_stmt varchar2(300);
BEGIN
BEGIN
TNAME := c.TNAME;
CNAME := c.CNAME;
RID := c.RID;
DBMS_OUTPUT.PUT_LINE( TNAME || '=>' || CNAME);
updt_stmt := 'UPDATE ' || TNAME || ' SET ' || CNAME || ' = ''123'' WHERE ROWID like ''%' || RID || '%''';
EXECUTE IMMEDIATE updt_stmt;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END;
END;
END LOOP;
END;