2012-03-28 81 views
0

我正在嘗試從磁帶文件中輸入幾條記錄到駐留在Oracle數據庫中的表中。我正試圖在控制文件的幫助下做到這一點。
但是,在磁帶文件中幾乎沒有針對主鍵屬性的空格。在遷移記錄的同時,加載器將這些空間視爲NULL,從而引發錯誤。

有沒有辦法將空格插入主鍵屬性?
如何允許分配爲主鍵的屬性中的空格?

在此先感謝!

+1

主鍵列是VARCHAR2類型嗎? – Ollie 2012-03-28 13:42:06

+0

是否在控制文件中嘗試了CONSTANT關鍵字? – tbone 2012-03-28 13:44:23

+0

謝謝...我得到了解決方案。我在控制文件中添加了PRESERVE BLANKS關鍵字,然後空白被接受。 – 2012-03-28 15:31:20

回答

1

根據定義,主鍵不能爲空。所以不,你無法加載一個空值的記錄。您需要找到一種方法在加載時向該字段中添加唯一值。所以常數不是一個選項,因爲它只適用於一個記錄,因爲主鍵的唯一性因素。

對此,有選項。您可以創建一個與目標結構相同但沒有主鍵的臨時表,然後先將該表加載到該表中,然後將有效記錄傳輸到表中,並找出稍後處理壞行的方法。

或者,如果密鑰是基於數字的,那麼只要您沒有使用SQL * Loader direct選項,您可以將插入觸發器添加到該表中,該表檢查該字段中的空值並將其設置爲一個值,如果它爲空。序列通常用於此目的,但在您的實例中,您需要測試是否存在與現有鍵值衝突(例如,創建的序列的起始範圍遠遠高於數據源中的任何值)。儘管如此,如果源系統最終複製了您創建的密鑰,並且它打破了基於該ID從目標跟蹤記錄返回到源的任何能力,那麼您仍然有可能遇到將來的衝突。

+0

謝謝......我得到了解決方案。我在控制文件中添加了PRESERVE BLANKS關鍵字,然後空白被接受。 – 2012-03-28 15:30:57