【问题标题】:How to trim the new line character of column data in ctl file of SQL LoaderSQL Loader的ctl文件中如何修剪列数据的换行符
【发布时间】:2016-08-14 09:24:43
【问题描述】:

我的表数据包含从 sql loader ctl 文件加载的换行符,一个名为“IPADDRESS”的列正在加载换行符:

我的 ctl 文件:

 load data
 INFILE 'abc.txt'
 INTO TABLE TABLENAME
 APPEND
 FIELDS TERMINATED BY '\|'
 (MAKE,
 CUST_ID "UPPER(:CUST_ID)",
 IPADDRESS  "REGEXP_REPLACE(:IPADDRESS, '\\.\\D+', '', 1, 0)"
 )

表存储的数据为Ex:

Make CUST_ID        IPADDRESS 
------------------------------
C   MPG-VG-ALG01    "9.7.69.37
"
C   MPG-VG-ALG03    "9.7.69.39
"

样本输入文件数据:

C|mpg-vg-alg01.gdl.mex.ibm.com|9.7.69.37 
C|mpg-vg-alg03.gdl.mex.ibm.com|9.7.69.39 
C|mpg-vg-alg04.gdl.mex.ibm.com|9.7.69.23

【问题讨论】:

  • 您可以通过替换CHAR(13)CHAR(10)来替换换行符或回车例如:REPLACE(REPLACE('column value', CHAR(13),''),CHAR(10) ,'')... 或者你可以在正则表达式中替换它
  • 这个逻辑不起作用
  • 请给我输入数据的样本
  • C|mpg-vg-alg01.gdl.mex.ibm.com|9.7.69.37 C|mpg-vg-alg03.gdl.mex.ibm.com|9.7.69.39 C|mpg- vg-alg04.gdl.mex.ibm.com|9.7.69.23
  • @Rohan Büchner,我在我的问题中提到了示例文件数据,已编辑..请查看

标签: oracle etl sql-loader ctl


【解决方案1】:

是的,一种选择是使用REPLACE() 功能,但需要添加更多功能;

  • 为任何数据类型的字符串添加CHAR(data_length),即使它的类型是VARCHAR2
  • 添加 CHR(10)换行)以及 CHR(13)回车 )
  • 不要忘记添加嵌套在REPLACE() 中的TRIM() 函数以防止额外的 也有问题
  • 使用第三个参数是多余的

比如

column_name CHAR(4000) "REPLACE(TRIM(:column_name),CHR(13)||CHR(10))"'

此外

column_name CHAR(4000) "TRANSLATE(TRIM(:column_name),CHR(13)||CHR(10),' ')"' 

可以用作替代品。

【讨论】:

    【解决方案2】:

    我的问题的答案是:column_name "REPLACE(:column_name,CHR(13),'')";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多