テーブルTRUNCATEでORA-02266の対応

oracle-plane2-100


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つの外部キーが影響していることがわかります。

対処としては以下になります。

  1. 外部キーを無効化
  2. テーブルをTRUNCATE
  3. 外部キーを有効化



 

テーブル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が完了です。

 



 

 


サブコンテンツ

このページの先頭へ