2016-08-18 29 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