91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle違反約束數據的workaround

發布時間:2020-08-11 16:56:12 來源:ITPUB博客 閱讀:114 作者:bisal 欄目:關系型數據庫

最近為測試做一些數據導入,其中存在一些主子表,由于種種原因,子表有些記錄,外鍵值在主表無記錄,導致數據導入過程中,無法創建外鍵,

Failing sql is:

ALTER TABLE "A" ADD CONSTRAINT "FK_A_REF_B" FOREIGN KEY ("A_ID") REFERENCES "B" ("ID") ENABLE

ORA-39083: Object type REF_CONSTRAINT failed to create with error:

ORA-02298: cannot validate (FK_A_REF_B) - parent keys not found


此時若手工執行,

ALTER TABLE A ADD CONSTRAINT FK_A_REF_B FOREIGN KEY (A_ID) REFERENCES B (ID) ENABLE;


就會提示ORA-02298,

oerr ora 2298
02298, 00000,"cannot validate (%s.%s) - parent keys not found"
*Cause: an alter table validating constraint failed because the table has orphaned child records.
*Action: Obvious


這種數據不規則,難以滿足數據完整性要求。此時,可以使用not validate的方式,對歷史數據不進行約束控制,而只針對新數據開啟驗證。

alter table a add constraint fk_a_ref_b foreign key(a_id) references b(id) novalidate;


針對正在修改的數據,以及存在的數據,可以有不同的生效設置,Oracle官方文檔的介紹,


下面可以根據rowid,定位A表違規數據,要么刪除,要么改造,讓其符合約束,進而就可以正常執行。

select * from A where rowid in (select row_id from exceptions);


需要注意的是,exceptions是一張普通堆表,因此存儲的數據,需要自行清理,要么執行truncate,要么執行drop。



總結:

1. 針對不規則數據,可以使用alter table ... NOVALIDATE,對歷史數據不做約束,只約束新增數據。

2. alter table可以使用exceptions into子句,讓非法數據自動記錄,異常表exceptions可以使用腳本,也可以自行創建,但需要自行清理,利用這張表可以整理數據,糾正不規則數據。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄江县| 蒙自县| 白水县| 龙胜| 德保县| 瑞金市| 富阳市| 绥化市| 乐都县| 新民市| 高陵县| 枞阳县| 华池县| 昭觉县| 阳泉市| 耒阳市| 静宁县| 东宁县| 青冈县| 吉安县| 河南省| 盐边县| 高雄县| 石林| 筠连县| 措美县| 怀柔区| 顺义区| 平安县| 西峡县| 泰兴市| 新沂市| 兖州市| 佛山市| 龙山县| 大丰市| 离岛区| 湖北省| 上杭县| 绿春县| 苗栗市|