truncate有外來鍵約束的表,報ORA-02266處理。

張衝andy發表於2016-12-25
問題描述:當父表有子表的外來鍵約束時,無法直接truncate父表。報ORA-02266: unique/primary keys in table referenced by enabled foreign keys。
這裡使用另一種辦法來解決這個問題:先把外來鍵失效,truncate表之後再把外來鍵生效。
SQL> truncate table machine_room;
truncate table machine_room
               *
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys


1.查詢外來鍵約束


SQL> select TABLE_NAME,CONSTRAINT_NAME,CONSTRAINT_TYPE,R_CONSTRAINT_NAME from ALL_CONSTRAINTS WHERE constraint_type='R' and owner='UML';


TABLE_NAME                     CONSTRAINT_NAME                R_CONSTRAINT_NAME
------------------------------ ------------------------------ ------------------------------
TEAM                           FK_T_SCHOOL01                  PK_T_SCHOOL
TEAM_MESSAGE                   FK_T_TEAM04                    PK_T_TEAM
TEAM_MESSAGE                   FK_T_SCHOOL0                   PK_T_SCHOOL
RACE_SEAT                      FK_T_MACHINE_ROOM02            PK_T_MACHINE
RACE_SEAT                      FK_T_TEAM02                    PK_T_TEAM
RACE_MARK                      FK_T_TEAM03                    PK_T_TEAM


6 rows selected.


2. 失效子表的外來鍵約束  (所有外來鍵)
SQL> ALTER TABLE  race_seat DISABLE CONSTRAINT fk_t_machine_room02 ;


Table altered.


3. 再次執行truncate父表資料的操作
SQL> truncate table machine_room;


Table truncated.


4. 生效外來鍵約束 (剛才所有失效外來鍵)
SQL> ALTER TABLE race_seat  enable CONSTRAINT fk_t_machine_room02;


Table altered.


ok,轉載請標明出處。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2131336/,如需轉載,請註明出處,否則將追究法律責任。

相關文章