我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle违反约束数据的workaround

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle违反约束数据的workaround

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle数据库中的约束是什么

在Oracle数据库中,约束是用来确保数据完整性和一致性的规则。约束可以应用在表的列级别或表级别,常见的约束类型包括:主键约束:确保列或列组的唯一性,并且列或列组不允许包含NULL值。外键约束:确保一个表中的外键值只能引用另一表中的主键值
Oracle数据库中的约束是什么
2024-03-02

MySQL数据库的约束

文章目录 一、约束是什么?二、约束的具体操作Not NULLUNIQUE约束的组合使用PRIMARY KEYDEFAULTFOREIGN KEY 一、约束是什么? 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规
2023-08-30

MySQL:数据类型和表的约束

1. 数据类型 学习语言的时候首先就是学习数据类型,数据类型起着为变量合理分配空间的作用。数据库同样需要合理使用空间,其次还可以约束SQL语句的正确性,所以同样需要数据类型。 1.0. 数据类型分类 分类数据类型解释数值类型BIT (
2023-08-16

MySQL数据库的约束使用实例

目录1. NULL约束2. UNIQUE(唯一约束)3. DEFAULT(默认值约束)4. PRIMARY KEY(主键约束)5. FOREIGN KEY(外键约束)数据库的约束就是关系型数据库给我们提供的一种"校验数据"合法性的机制1.
2022-12-03

MySQL数据库的约束限制详解

这篇文章主要介绍了MySQL数据库的约束限制详解,数据库的约束是对表中数据进行的一种限制,为了保证数据的正确性、有效性、完整性,下文简单介绍需要的朋友可以参考一下
2022-11-13

MySQL数据库表中的约束详解

目录mysql表中的约束(constraint)约束分类非空约束唯一性约束复合约束主键约束自增列-AUTO_INCREMENTlzqXVuAOKT外键约束FOREIGN KEY约束CHECK约束DEFAULT约束MySQL表中的约束(con
2023-03-02

MySQL数据库:数据完整性及约束的应用

数据完整性1.域完整性:---------匹配完整性:非空、缺省字段/列2.实体完整性:-------匹配完整性:主键、唯一键记录/行3.引用完整性:-------匹配完整性:外键表与表之间约束:constraintMySQL中的约束分类主键:primary
2019-01-16

数据库主键约束、唯一约束和唯一索引的区别是什么

本篇内容主要讲解“数据库主键约束、唯一约束和唯一索引的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库主键约束、唯一约束和唯一索引的区别是什么”吧!主键约束(PRIMARY KEY
2023-06-29

MySQL数据库表中的约束有哪些

这篇文章主要讲解了“MySQL数据库表中的约束有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库表中的约束有哪些”吧!MySQL表中的约束(constraint)为了保证数
2023-07-05

MySQL数据库中的外键约束详解

外键是关系数据库中一种重要的数据完整性约束,它用于建立表与表之间的关联关系。外键约束指定了一个表的列或一组列必须存在于另一个表的主键或唯一键中。在MySQL中,外键约束使用FOREIGN KEY关键字来定义。以下是外键约束的详细解释:1.
2023-09-22

MySQL数据库之表的约束图文详解

目录一、表的约束二、空属性三、默认值四、列描述五、zerofill六、主键七、自增长八、唯一键九、外键总结一、表的约束前面我们所讲到的数据类型就是一种表的约束。为什么这么说呢?因为数据类型有自己的大小,也就是我们插入的数据是有范围的,不能
MySQL数据库之表的约束图文详解
2024-09-30

编程热搜

目录