首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle 預存程序 INSERT 唯一鍵衝突:資料與目標表重複而非來源重複

     編輯:程式設計綜合問答

現象

預存程序批次 INSERT 200 筆,第 90 筆報 ORA-00001,但來源查詢無重複。

根因

來源 200 筆與 目標表 EOVHR 既有資料 存在主鍵/唯一索引衝突。

排查 SQL


SELECT st.*
FROM source_table st
INNER JOIN eovhr e
  ON st.pk_col = e.pk_col;  -- 依實際主鍵欄位調整

若有回傳行,即為衝突資料。

解決策略

  1. MERGE (UPSERT):
    
    MERGE INTO eovhr t
    USING (SELECT * FROM source_table) s
    ON (t.pk_col = s.pk_col)
    WHEN NOT MATCHED THEN INSERT (...) VALUES (...)
    WHEN MATCHED THEN UPDATE SET ...; -- 或忽略
    
  2. INSERT ... WHERE NOT EXISTS:
    
    INSERT INTO eovhr (...)
    SELECT ... FROM source_table s
    WHERE NOT EXISTS (SELECT 1 FROM eovhr t WHERE t.pk_col = s.pk_col);
    
  3. 捕獲例外略過(PL/SQL):
    
    BEGIN
      INSERT INTO eovhr ...;
    EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; -- 記錄日誌
    END;
    
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved