oracle关于外键的使用
2015-11-23 11:54
381 查看
查找外键(根据表名)
select * from user_constraints t where t.r_constraint_name = 'PK_PUB_BANK'
在运行以下语句的时候,报错如下:
ALTER TABLE PN_POST
ADD CONSTRAINT POST_CLOB_FK
FOREIGN KEY (POST_BODY_ID)
REFERENCES PN_POST_BODY_CLOB (OBJECT_ID);
Error at line 1
ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字
[@more@]
主要原因是:
在添加CONSTRAINT的时候,默认是需要VALIDATE表中的已有数据的。
你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入。主要看两表中的数据是否一致,从表中要关联外键的字段中的数据必须包含在主表相关字段的数据内。
处理的方法有:
1> 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE.
SQL > ALTER TABLE PN_POST
ADD CONSTRAINT POST_CLOB_FK
FOREIGN KEY (POST_BODY_ID)
REFERENCES PN_POST_BODY_CLOB (OBJECT_ID)
NOVALIDATE;
2> 按照子表的外键查看一下不存在的副本记录,将不存在的父表记录补全
select * from user_constraints t where t.r_constraint_name = 'PK_PUB_BANK'
在运行以下语句的时候,报错如下:
ALTER TABLE PN_POST
ADD CONSTRAINT POST_CLOB_FK
FOREIGN KEY (POST_BODY_ID)
REFERENCES PN_POST_BODY_CLOB (OBJECT_ID);
Error at line 1
ORA-02298: 无法验证 (PNET.POST_CLOB_FK) - 未找到父项关键字
[@more@]
主要原因是:
在添加CONSTRAINT的时候,默认是需要VALIDATE表中的已有数据的。
你要插入的表A里,有外键连接到另一个表B的主键,你在表A的外键列插入的值,在表B的主键列找不到就不能插入。主要看两表中的数据是否一致,从表中要关联外键的字段中的数据必须包含在主表相关字段的数据内。
处理的方法有:
1> 先不验证已有数据的CONSTRANT,加上参数NOVALIDATE.
SQL > ALTER TABLE PN_POST
ADD CONSTRAINT POST_CLOB_FK
FOREIGN KEY (POST_BODY_ID)
REFERENCES PN_POST_BODY_CLOB (OBJECT_ID)
NOVALIDATE;
2> 按照子表的外键查看一下不存在的副本记录,将不存在的父表记录补全
相关文章推荐
- 【转】Oracle 中的 TO_DATE 和 TO_CHAR 函数 日期处理
- 去O渐成过去式,Cloud进入现在时-2015 Oracle技术嘉年华精彩回放
- KUP-04087
- Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name
- Quartz数据表-Oracle
- oracle 含数字的字符串的排序问题
- Linux下开启Oracle oem
- 配置NHibernate将枚举保存为Oracle数据库中的字符串
- Oracle数据库 sql%found,sql%notfound,sql%rowcount
- Oracle queue - sql
- Oracle外部表
- Oracle--用户管理与权限分配
- ORACLE用JDBC操作CLOB
- oracle分配权限 学习笔记--转载
- 基于Oracle的高性能动态SQL程序开发
- 关于Win7 64位下:Navicat无法连接64位Oracle 11gR2:Cannot load OCI DLL解决方法
- Oracle查询重复数据并删除,只保留一条记录
- Oracle清空或者删除当前用户下所有的表
- Oracle数据库按时间进行分组统计数据的方法
- oracle 数据库小知识总结