【问题标题】:External table truncates trailing whitespace while reading from file外部表在从文件读取时截断尾随空格
【发布时间】:2016-08-18 08:38:19
【问题描述】:

我正在尝试将文件内容加载到外部表中。执行此操作时,尾随空格会被截断。

'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.

【问题讨论】:

    标签: oracle oracle12c external-tables


    【解决方案1】:

    添加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       >                                                          
    

    【讨论】:

    • 外部表中的记录也采用换行符..是否有可能单独修剪新行
    • 我不想使用 substr..因为我的文件在 1GB 左右,它会影响性能
    • 不确定你的意思...records delimited by newline 不是在处理这个问题吗?
    • 是的,应该,但不是……更新了问题
    • 请提出一个新问题。您也许可以使用 continueif,但您需要多解释一下,并且您不应该扩大这个问题的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多