初始更新语句:
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;