テーブルTRUNCATEでORA-02266の対応
TRUNCATEで生じるORA-02266の原因
テーブルデータを全て削除するためにTRUNCATEした際、ORA-02266で失敗することがあります。
このエラーは、削除しようとしたテーブルに外部キーが有効であるために発生します。
SQL> TRUNCATE TABLE TEST.FMCODE; TRUNCATE TABLE TEST.FMCODE * 行1でエラーが発生しました。: ORA-02266: 表には有効な外部キーによって参照される一意キー/主キーが含まれています。 SQL>
どの外部キーによって削除できないのかは、下記SQLで調べることができます。
TRUNCATEするテーブル名を「table_name = ”」に指定して、下記SQLを実行します。
SQL> SELECT constraint_name, table_name, status FROM user_constraints WHERE r_constraint_name IN ( SELECT constraint_name FROM user_constraints WHERE table_name = 'FMCODE' ); CONSTRAINT_NAME TABLE_NAME STATUS ------------------------------ ---------------- -------- FK_FMCODE_FMCODEMAP FMCODEMAP ENABLED FK_FMCODE_FMCODECOND FMCODECOND ENABLED
上記結果から、CONSTRAINT_NAMEに表示された2つの外部キーが影響していることがわかります。
対処としては以下になります。
- 外部キーを無効化
- テーブルをTRUNCATE
- 外部キーを有効化
テーブルTRUNCATE手順
1.外部キーを下記SQLで無効化します。
SQL> ALTER TABLE FMCODEMAP DISABLE CONSTRAINTS FK_FMCODE_FMCODEMAP; SQL> ALTER TABLE FMCODECOND DISABLE CONSTRAINTS FK_FMCODE_FMCODECOND;
2.テーブルをTRUNCATEします。
SQL> TRUNCATE TABLE TEST.FMCODE;
3.外部キーを下記SQLで有効化します。
SQL> ALTER TABLE FMCODEMAP ENABLE CONSTRAINTS FK_FMCODE_FMCODEMAP; SQL> ALTER TABLE FMCODECOND ENABLE CONSTRAINTS FK_FMCODE_FMCODECOND;
これでテーブルTRUNCATEが完了です。