2016-08-18 70 views
1

我試圖將文件內容加載到外部表格。在做這件事時,尾部空格被截斷。外部表格從文件讀取時截斷尾隨空白

'CREATE TABLE ' || rec.ext_table_name || ' (ROW_DATA VARCHAR2(4000)) ORGANIZATION EXTERNAL ' || 
    '(TYPE ORACLE_LOADER DEFAULT DIRECTORY ' || rec.dir_name || ' ACCESS ' || 'PARAMETERS (RECORDS ' || 
    'DELIMITED by NEWLINE NOBADFILE NODISCARDFILE ' || 
    'FIELDS REJECT ROWS WITH ALL NULL FIELDS (ROW_DATA POSITION(1:4000) char)) LOCATION (' || l_quote || 
    'temp.txt' || l_quote || ')) REJECT LIMIT UNLIMITED' 

例如,B代表一個空白,我的文件有:

Line1sometextBBBBBBB 

我的外部表讀取剛纔:

Line1sometext 

我要加載的文件也有空白。我怎樣才能阻止它消除尾隨的空白?

目前的問題是:

如果文件具有:

「這是與

的測試值」

^ this new line is also a part of the row_data. 

the problem

回答

2

添加a trim_spec clause,特別是這裏NOTRIM,更改默認領域修整行爲:

... FIELDS REJECT ROWS WITH ALL NULL FIELDS (ROW_DATA POSITION(1:4000) char NOTRIM)) LOCATION (... 
                      ^^^^^^ 

快速演示:

create table t42_ext (
    row_data varchar2(4000) 
) 
organization external 
(
    type oracle_loader default directory mydir access parameters 
    (
    records delimited by newline nobadfile nodiscardfile 
    fields reject rows with all null fields 
    (
     row_data position(1:4000) char notrim 
    ) 
) 
    location ('temp.txt') 
) 
reject limit unlimited; 

Table T42_EXT created. 

select '<'|| row_data ||'>' from t42_ext; 

'<'||ROW_DATA||'>'                
-------------------------------------------------------------------------------- 
<Line1sometext  >               
+0

感謝@Alex ...救了我的一天....感謝 – theRoot

+0

的在外部表中的記錄也需要新的行字符..是否有任何可能修整新行獨自 – theRoot

+0

我不想使用substr..since,因爲我的文件是1GB左右,它會影響性能 – theRoot