web-dev-qa-db-ja.com

SQLエラー:OA-12991-参照されているすべての複数列制約を削除した後、列を削除できません

私はOracle DBを初めて使用するので、助けが必要です。特定の列を削除したいのですが、特定のエラーが発生します。特に問題は次のとおりです。

SQLエラー:ORA-12991:列は複数列制約の参照です原因:いくつかの制約によって参照されている列を削除しようとしましたアクション:削除された列を参照するすべての制約を削除するか、ステートメントでCASCADE CONSTRAINTSを指定してください。

だから私は先に進んで、次のようなことを行うことで、列を参照するすべての制約を検索しました:

SELECT * FROM USER_TAB_COLS WHERE COLUMN_NAME = 'My_Column_Name'

削除する列で参照されているすべての制約を見つけて削除した後、もう一度列を削除しようとしましたが、同じ問題が引き続き発生します。質問を投稿する前に、これまでに少し時間をかけて調査し、これが「補足ログ」の問題である可能性を確認しました。繰り返しますが、私はOracle DBプログラミングに非常に慣れていないので、誰かがこれに光を当てて、ドロップしたい列を参照する制約を一時的に削除した後、どうしてなぜ列をドロップできないのかを提案できますか?前もって感謝します!

PS:個人的にカスケード制約を使用すると、問題が修正されるとは思いません。また、どの制約が削除されるのかを知らない限り、すべての制約を削除したくありません。したがって、これは私にとって実行可能な解決策ではありません。

セットアップ:

create table t3 (c1 number, c2 number);
alter table t3 add  supplemental log group sl1 (c1, c2) always;
alter table t3 add constraint t3_uk unique (c1, c2);
insert into t3 values (1, 2);
commit;

列を削除してみてください:

SQL> alter table t3 drop column c2;
alter table t3 drop column c2
                           *
ERROR at line 1:
ORA-12991: column is referenced in a multi-column constraint

これまでのところ、うまくいきました。制約を削除します。

SQL> alter table t3 drop constraint t3_uk;

Table altered.

SQL> alter table t3 drop column c2;
alter table t3 drop column c2
                           *
ERROR at line 1:
ORA-12991: column is referenced in a multi-column constraint

まだ動作しません、同じエラー。補足ロググループを確認します。

select * from user_log_groups where table_name = 'T3'

OWNER LOG_GROUP_NAME TABLE_NAME LOG_GROUP_TYPE      ALWAYS      GENERATED
----- -------------- ---------- ------------------- ----------- --------------
BP    SL1            T3         USER LOG GROUP      ALWAYS      USER NAME

補足ロググループを削除してから、列をもう一度削除してみてください。

SQL> alter table t3 drop supplemental log group sl1;

Table altered.

SQL> alter table t3 drop column c2;

Table altered.
3
Balazs Papp