我在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就没有问题。大家有什么建议吗

解决方案 »

  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属性的办法。
    最好给出例子。