2009-06-15 109 views
0

自動禁用當我準備將數據插入到約束被自動禁止用於我所添加的約束(外鍵)子表參照完整性約束是Oracle

u能請幫我..........

+0

您需要澄清事件的流程。你添加什麼樣的約束?它什麼時候禁用?您插入的行是否與約束一致?等 – GWLlosa 2009-06-15 12:34:24

+0

最初我爲子表定義外鍵...並檢查其狀態啓用。當試圖將記錄插入該表中時,約束的狀態被禁用。 – kishore 2009-06-15 13:25:32

+0

約束的郵政編碼和樣本插入數據 – jle 2009-06-15 13:26:25

回答

1

約束不能「自動」禁用 - 檢查它的當前狀態,通過發出這條SQL(如表/約束所有者):

選擇狀態,從USER_CONSTRAINTS其中constraint_name命令=「theNameOfYourConstraint

這可能是它前已經向您的操作無效的情況下驗證。它將保持在該狀態,直到明確啓用。

[其他]

我從後面評論現在看到的是,禁用似乎是由於使用SQL * Loader的直接路徑負載。如果你想防止這種情況發生,我認爲你唯一的選擇是使用常規負載並處理異常情況。將文件綁定到外部表定義將允許您使用更爲程序化的方法,因爲您可以像處理Oracle表一樣處理該文件。

從Oracle文檔:依賴於其他行或表,如參照約束

完整性約束,是直接路徑加載之前禁用,必須在之後重新啓用。

0

您將不得不向我們提供更多信息/代碼。 描述你的約束。 你如何插入記錄?

  • 插入語句
  • 調用過程
  • SQL裝載機

重現您的問題:

select * 
from user_constraints 
where constraint_name = 'theNameOfYourConstraint'; 

do your insert here 

select * 
from user_constraints 
where constraint_name = 'theNameOfYourConstraint'; 

,並顯示我們的輸出。

1

從Utilities手冊中,直接路徑加載會自動禁用關係完整性和檢查約束。傳統路徑不應該有這個問題。

有一個REENABLE子句在直接路徑加載結束時啓用約束。