初始更新語句:
UPDATE TEST T SET T.SEQ = (SELECT COUNT(1) + 1 FROM TEST WHERE ID=T.ID) WHERE T.CREATE_TIME > '2019';
在PL/SQL中執行報錯:違反唯一性約束
此時可以通過下面的SQL來更新:
DECLARE NUMROWS INTEGER; BEGIN FOR CUR_1 IN (SELECT * FROM TEST T WHERE T.CREATE_TIME > '2019' ) LOOP BEGIN NUMROWS := NUMROWS + 1; UPDATE TEST T SET T.SEQ = (SELECT COUNT(1) + 1 FROM TEST WHERE ID=T.ID) WHERE T.ID = CUR_1.ID; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM || ' 更新失敗:' || CUR_1.ID); END; IF NUMROWS > 1000 THEN COMMIT; NUMROWS := 0; END IF; END LOOP; IF NUMROWS > 0 THEN COMMIT;