亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

固阳县| 洛扎县| 太原市| 聂拉木县| 喀什市| 宿迁市| 胶州市| 广德县| 庆安县| 曲沃县| 万州区| 江西省| 英超| 达尔| 唐河县| 博客| 额尔古纳市| 白河县| 临武县| 华亭县| 郎溪县| 广东省| 疏勒县| 永和县| 崇明县| 石狮市| 胶南市| 茶陵县| 象州县| 垦利县| 通州市| 建湖县| 侯马市| 阿克陶县| 会东县| 龙口市| 阿拉善右旗| 保定市| 临夏县| 青浦区| 云林县|