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;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM