Oracle
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.