以下のPL/SQLコードでは、TABLE_ONEはテーブル名tname、列名cname、およびrowidridを保持します。Forループは、TABLE_ONEからレコードをフェッチし、行IDがridのレコードのテーブルtnameの列cnameを更新します。ただし、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;