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