oracle批量更新数据时,提示"违反唯一约束条件",如何找到具体的报错数据

初始更新语句:

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;

 

posted on 2020-06-10 10:59  Alisa记录  阅读(1448)  评论(0)    收藏  举报