Oracle导入数据外键问题

假设表t2的列fk_t2上有外键,依赖于t1表的pk_t1列,t3表的列fk_t3上有外键,依赖于t2表的pk_t2,即表t2既是父表也是子表,当将t2表数据清空重新导入时,很容易遇到外键冲突问题。

外键约束的四种状态:
(1)ENABLE VALIDATE:约束在创建时,默认就是此状态。此状态会“检查表中原有行和新插入的行”。
(2)ENABLE NOVALIDATE:不能输入违反约束的新数据。但是,在创建约束时,并不检查表中原有行。
(3)DISABLE VALIDATE:检查表中原有行是否违反约束,表中可以插入违反约束的行。
(4)DISABLE NOVALIDATE:约束处于禁用状态,且此状态检查表中原有数据是否违反约束.

truncate或drop一张表的时候,需要看他上面是否有外键,同时确认是否有别的表上存在外键依赖于这张表

可以通过如下SQL查找

select 'alter table '||t.owner||'.'||t.table_name||' disable constraint '||t.constraint_name||' ; '  as  rr  ---禁用该表的子表的外键
  from dba_constraints t
 where t.constraint_type = 'R'
   and t.r_constraint_name in
       (select constraint_name
          from dba_constraints h
         where h.table_name in ('&table1','&table2'))
union all
select 'alter table '||t1.owner||'.'||t1.table_name||' disable constraint '||t1.constraint_name||' ; '  as rr ---禁用该表上的外键
  from dba_constraints t1
 where t1.constraint_type = 'R'
   and t1.table_name in ('&table1','&table2');

将拼接出来的SQL直接,即可禁用相应的外键约束,数据导入之后,再将外键启用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值