銀行資料集中專案需合併各地分散的代碼表。合併前必須停用所有外鍵與觸發器,資料處理完畢後重新啟用。本文提供兩支 PL/SQL 腳本:
SQL> SET SERVEROUTPUT ON;
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SQL> EXEC P_ALTERCONS('ENABLE'); -- 或 'DISABLE'
參數僅接受 ENABLE 或 DISABLE,其它值報錯。
C_CON 查詢 USER_CONSTRAINTS 中 CONSTRAINT_TYPE='R'(外鍵)C_TRIGGER 查詢 USER_TRIGGERSDBMS_SQL) 執行 ALTER TABLE ... ENABLE/DISABLE CONSTRAINT 及 ALTER TRIGGER ... ENABLE/DISABLEORA-02298 時呼叫 P_CON_ERR 自動偵測違規資料SQL> EXEC P_CON_ERR('FK_SB_HJJL_RELATION__SB_PZXH');
外鍵錯誤情況
============
NSRNM,PZLXDM,PZXH
-----------------
190321058, 900, 13546
777777775, 108, 17526
...
USER_CONS_COLUMNS 取得外鍵欄位清單,組合 WHERE 條件USER_CONSTRAINTS 取得被參照表名(父表)SELECT DISTINCT 外鍵欄位 FROM 子表 A WHERE NOT EXISTS (SELECT NULL FROM 父表 B WHERE A.欄位=B.欄位...)兩支腳本完整原始碼已包含於原文,可直接部署使用。