TRUNCATE失敗でORA-02266

TRUNCATE失敗でORA-02266

TRUNCATE失敗でORA-02266が発生することがあります。

これは外部キーが有効なためにおこります。

テーブルに対して有効な外部キーを検索するSQLです。

SELECT
  CONSTRAINT_NAME,
  TABLE_NAME,
  STATUS
FROM
  USER_CONSTRAINTS
WHERE
  R_CONSTRAINT_NAME IN (
    SELECT
      CONSTRAINT_NAME
      FROM
        USER_CONSTRAINTS
      WHERE
        TABLE_NAME = 'テーブル名'
  )

実行結果は、外部キー名、テーブル名、ENABLE or DISABLEのどちらかになります。

TRUNCATEしたい場合はこの外部キーをDISABLEにする必要があります。

外部キーを無効化するには以下を実行します。

ALTER TABLE テーブル名 DISABLE CONSTRAINTS 外部キー名

これで外部キーを無効化し、TRUNCATEすることができます。TRUNCATE実行後、以下で外部キーを有効化します。

ALTER TABLE テーブル名 ENABLE CONSTRAINTS 外部キー名

コメント

タイトルとURLをコピーしました