Oracle 中Truncate有主外键关系的表有什么特殊之处吗?

时间:2021-10-03 00:41:22
我在Oracle 8i的存储过程中truncate表,比如有表A,B,C
其中表A的主键是表B的外键,表C独立,那么我写
execute  immediate 'truncate table C’;
execute  immediate 'truncate table B’;
execute  immediate 'truncate table A’;

前两句没有问题,记录也清掉了,但执行第三句时出错,说表A的主键被其他表用作外键,而同样的语句用Delete from就没有问题。

大家有什么建议吗


6 个解决方案

#1


第三句执行时报:

ORA-02266: 表中的唯一/主关键字被启用的外部关键字引用

#2


记得好象在语句后加上descade,
针对这一张表试一下吧。

#3


我的解决办法就是:
1.删除外键
2.做truncate操作
3.建立外键
----------这样操作比用delete操作快。

#4


也可以用 disable , truncate , enable 。 见下例:

alter table PINCHANGE modify constraint PINCHANGE_FK_PIN disable;
alter table ADDRESS modify constraint ADDRESS_FK_PIN disable;
alter table SPECIALRECORD modify constraint SPECIALRECORD_FK_PIN disable;
alter table TRADE modify constraint TRADE_FK_PIN disable;
alter table EMPLOYMENT modify constraint EMPLOYMENT_FK_PIN disable;
alter table GUARANTEE modify constraint GUARANTEE_FK_PIN disable;
alter table ANNOUNCE modify constraint ANNOUNCE_FK_PIN disable;

truncate table  PERSON       ;

alter table PINCHANGE modify constraint PINCHANGE_FK_PIN enable;
alter table ADDRESS modify constraint ADDRESS_FK_PIN enable;
alter table SPECIALRECORD modify constraint SPECIALRECORD_FK_PIN enable;
alter table TRADE modify constraint TRADE_FK_PIN enable;
alter table EMPLOYMENT modify constraint EMPLOYMENT_FK_PIN enable;
alter table GUARANTEE modify constraint GUARANTEE_FK_PIN enable;
alter table ANNOUNCE modify constraint ANNOUNCE_FK_PIN enable;

#5


楼上的方法很棒
我只奇怪:truncate受主外键约束,同样的语句用Delete from就没有问题。
??

#6


谢谢大家的意见,我的表有200多张,每张表都有很多主外键。我需要两个结论:
1。是否有主外键直接用truncate肯定不行?
2。如果用程序控制外键,是否有编程自动得到外键名称并控制它的enable和disable属性的办法。
最好给出例子。

#1


第三句执行时报:

ORA-02266: 表中的唯一/主关键字被启用的外部关键字引用

#2


记得好象在语句后加上descade,
针对这一张表试一下吧。

#3


我的解决办法就是:
1.删除外键
2.做truncate操作
3.建立外键
----------这样操作比用delete操作快。

#4


也可以用 disable , truncate , enable 。 见下例:

alter table PINCHANGE modify constraint PINCHANGE_FK_PIN disable;
alter table ADDRESS modify constraint ADDRESS_FK_PIN disable;
alter table SPECIALRECORD modify constraint SPECIALRECORD_FK_PIN disable;
alter table TRADE modify constraint TRADE_FK_PIN disable;
alter table EMPLOYMENT modify constraint EMPLOYMENT_FK_PIN disable;
alter table GUARANTEE modify constraint GUARANTEE_FK_PIN disable;
alter table ANNOUNCE modify constraint ANNOUNCE_FK_PIN disable;

truncate table  PERSON       ;

alter table PINCHANGE modify constraint PINCHANGE_FK_PIN enable;
alter table ADDRESS modify constraint ADDRESS_FK_PIN enable;
alter table SPECIALRECORD modify constraint SPECIALRECORD_FK_PIN enable;
alter table TRADE modify constraint TRADE_FK_PIN enable;
alter table EMPLOYMENT modify constraint EMPLOYMENT_FK_PIN enable;
alter table GUARANTEE modify constraint GUARANTEE_FK_PIN enable;
alter table ANNOUNCE modify constraint ANNOUNCE_FK_PIN enable;

#5


楼上的方法很棒
我只奇怪:truncate受主外键约束,同样的语句用Delete from就没有问题。
??

#6


谢谢大家的意见,我的表有200多张,每张表都有很多主外键。我需要两个结论:
1。是否有主外键直接用truncate肯定不行?
2。如果用程序控制外键,是否有编程自动得到外键名称并控制它的enable和disable属性的办法。
最好给出例子。