网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Oracle违反约束数据的workaround

最近为测试做一些数据导入,其中存在一些主子表,由于种种原因,子表有些记录,外键值在主表无记录,导致数据导入过程中,无法创建外键,

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、网络空间、营销软件、网站建设、余干网站维护、网站推广。

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可以使用脚本,也可以自行创建,但需要自行清理,利用这张表可以整理数据,纠正不规则数据。


分享题目:Oracle违反约束数据的workaround
本文来源:http://bjjierui.cn/article/geiche.html

其他资讯