2010-06-30 121 views
3

使用Oracle SQL * Loader時,我試圖將另一個數據庫中的可變長度字符串(lob)的列加載到Oracle中的varchar2(4000)列中。我們的字符串長度超過4000個字符,但每個人都同意這些字符串可以並且應該在遷移中被截斷(我們已經查看了超過4000個字符的數據,這沒有意義)。要做到這一點,我指定的列這種方式在控制文件:如何使用SQL * Loader截斷數據以適合字段? (ORA-12899)

COMMENTS CHAR(65535) "SUBSTR(:COMMENTS, 1, 4000)", 

但是,SQL * Loader的仍拒絕任何行,其中該記錄長於數據文件4000個字符:

記錄6484:被拒絕 - 表LOG_COMMENT,列COMMENTS出錯。 ORA-12899:列COMMENTS的值太大(實際:11477,最大值:4000)

記錄31994:被拒絕 - 表LOG_COMMENT,列COMMENTS上的錯誤。 ORA-12899:值太大專欄的意見(實際:16212,最大:4000)

記錄44063:被拒絕 - 表LOG_COMMENT,列註釋錯誤。 ORA-12899:值太大專欄的意見(實際:62433,最大:4000)

我試圖採取一個更小的子串,仍然得到了同樣的錯誤。如何更改我的控制文件以將超過4000個字符的字符串數據截斷爲varchar2(4000)列?

回答

1

檢查以確保您的數據編碼和Oracle編碼不衝突。 在這種情況下,加載時使用CHARACTERSET選項。

0

所有賬戶

COMMENTS CHAR(65535) "SUBSTR(:COMMENTS, 1, 4000)", 

是正確的語法。 使用SQLLDR 11.2.0.1它成功的作品對我來說,直到點輸入記錄列> 4000在那裏我得到一個

ORA-01461: can bind a LONG value only for insert into a LONG column 

如果我切換到直接路徑負載,然後我得到的SMAE錯誤你。

ORA-12899: value too large for column COMMENTS (actual: 4005, maximum: 4000) 
到底我有它分成2階段負荷

..我現在有一個臨時表與然後把它插入到ETH類型CLOB我與

COMMENTS CHAR(2000000000) 

加載的柱主表與

insert into propertable 
select dbms_lob.substr(comments,1,4000) 
from staging_table; 

希望這就是有用