2011-07-20 140 views
1

我試圖刪除表的所有外鍵。首先,我使用meta.getExportedKeys(null, null, table);rs.getString("FK_NAME")來獲得這些密鑰的所有名稱。無法刪除外鍵(Oracle)

但是,當我嘗試刪除使用此鍵:

ALTER TABLE tablename DROP CONSTRAINT fkname 

它僅適用於某些鍵。有時我得到:

ORA-02443: Cannot drop constraint - nonexistent constraint 

但外鍵肯定是存在的。我究竟做錯了什麼?

回答

5

你試過

ALTER TABLE tablename DROP CONSTRAINT "fkname"; 

呢?

您可能已經以區分大小寫的方式創建了約束,在這種情況下,當您刪除約束時,需要將約束名稱放在雙引號中。以下是SQL * Plus中的示例會話:

 
SQL> create table test (a integer); 

Table created. 

SQL> alter table test add constraint "abcd" unique (a); 

Table altered. 

SQL> alter table test drop constraint abcd; 
alter table test drop constraint abcd 
           * 
ERROR at line 1: 
ORA-02443: Cannot drop constraint - nonexistent constraint 


SQL> alter table test drop constraint "abcd"; 

Table altered. 

SQL> 
+1

另一種可能性是擁有該約束的表位於不同的模式中。例如,模式FRED包含表'A'和'B',並且'B'上的約束指向FREDA擁有的表'A' –

+0

@Gary謝謝!這是問題:) – jhasse