2013-01-10 42 views
0

我正在處理一項要求。刪除具有外鍵約束的行

有一個table.I想從該表中刪除一行,但我不能刪除它,因爲

1,本表由79表通過外鍵關係稱爲那些79桌 2.每個都由表

所以structure.So我需要從底層做起,並達到TOP.I需要從哪裏我應該開始做,通過SQL

所以你可以想象它的一種樹的其他100的簡稱?我需要創建一個臨時表或任何可以做任何有用的方法嗎?

注:CASCADE,不允許刪除

我可能沒有訪問任何SYS表..這是很方便的任何方法???我使用Oracle 10g

+0

什麼意思是「不允許」? – Mat

+1

表示表的設計方式是級聯刪除無法完成 –

回答

2

參見:http://www.techonthenet.com/oracle/foreign_keys/disable.php

ALTER TABLE table_name 
disable CONSTRAINT constraint_name; 

就一定要了解它會對其他數據/應用功能做這樣的手術的後果和影響。

而且,如果這一點不明確,一定要啓用約束之後

ALTER TABLE table_name 
enable CONSTRAINT constraint_name; 
+0

請參閱我們無法禁用約束,因爲應用程序和數據庫結構可能受到影響 –

+0

我們沒有訪問sys表我無法找到約束名 –

+0

那麼我猜這個問題不在我的知識範圍之內。我唯一的解決方法是從一個無約束的表格中刪除對該表格的引用,但正如你所說那是不現實的。 –

0

您可以使用下面的查詢(即不需要訪問SYS表)來獲取所有的外鍵表及其對應的主鍵。你可以用它來建立一種遍歷你的樹的遞歸函數,並刪除所有父項。

select uc.constraint_name, ucc.table_name, ucc.column_name from 
user_constraints uc 
left join user_cons_columns ucc on (uc.r_constraint_name = ucc.constraint_name) 
where uc.table_name = 'TABLENAME' 
and uc.constraint_type = 'R' 
+0

user_constraints在我們的數據庫中的sys下定義,所以我不能訪問...你可以建議任何其他方法 –

+0

很難相信你甚至不能訪問'user_constraints'。但是,如果你真的不能,我也沒有看到任何解決方案,對不起。 –

+0

我們可以創建一個表並對代碼值進行硬編碼或者您可以建議的任何其他方法 –