Oracle TRUNCATE しようとしたら、外部キーのせいで失敗 | クズリーマンのカス備忘録

Oracle TRUNCATE しようとしたら、外部キーのせいで失敗

ora-logo Oracle
スポンサーリンク

 

事象

TRUNCATE TABLE テーブル;

 

しようとすると、

ORA-02266

のエラーが出て、TRUNCATE できない。

 

原因

TRUNCATE しようとした TABLEが、外部キーによって参照されている為。

以下は正しくない説明かもだが、外部キーの親テーブル的な役割をになっている為、削除してしまうと、子テーブルが参照できる外部キーが無くなってまうため。

Oracle TRUNCATEできないイメージ例

 

対応

外部キーの制約を一時的に無効化する

 

-- 外部キー制約の無効化
ALTER TABLE 子テーブル名 DISABLE CONSTRAINT 外部キー制約名;

 

↑の、「子テーブル名」って書いたのは、外部キーの参照元に当たる側のテーブル名。

=参照先(親テーブル)ではない

=(TRUNCATE TABLE 対象のテーブルではない)

 

外部キー制約名 は、通常だったら、「FK_●●●」とか「●●●_FK」みたいな名前になってるはず。

TRUNCATE TABLE 対象のテーブル名;

する

成功する。

外部キーの制約を有効化する(もとに戻す)

-- 外部キー制約の有効化
ALTER TABLE 子テーブル名 ENABLE CONSTRAINT 外部キー制約名;

 

 

参考にしたサイト

外部キー制約参照先テーブルのTRUNCATE

ありがとうございました!

 

 

コメント

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