2
在下面的PL/SQL代碼中,TABLE_ONE保存表名tname,列名cname和rowid rid。 For循環從TABLE_ONE獲取記錄,並更新表tname中的列cname,以獲得行id爲rid的記錄。但是如果在tname中更新的記錄被鎖定,那麼for循環會卡住,並且不會處理來自TABLE_ONE的其他記錄。理想情況下,腳本忽略更新失敗的記錄並繼續進行。請告知可能是什麼問題。PL/SQL在循環內執行立即異常處理
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;