sql loader-带回车符的文件,换行加载到带有cr / lf的oracle中

时间:2014-11-19 21:28:27

标签: sql-server oracle oracle11g sql-loader

我从sql server获取数据,其中大多数列中的数据都有回车符和换行符。我需要使用回车和换行将它们加载到oracle中;基本上我必须将sql server 2012的数据镜像到oracle 11g。

下面是我的提取文件的样本

<#> [#BOR#] [#EOC#] 109 [#EOC#] 4 [#EOC#] testdata_Duplicate [#EOC#] testdata_Duplicate来自聊天[#EOC#]这个

     carriage return  field[#EOC]test2[#EOR#]

这里[#EOC#]是列分隔符,[#EOR#]是行分隔符。 [#BOR#]表示行的开头。最初我的加载失败是由于平面文件中的空行(数据提取)。然后我使用[#BOR#]和continueIf保留子句,以便sqlldr不会将空行(cr / lf)视为物理行。

使用[#BOR#]作为填充列,我的加载工作正常,但回车或换行不会加载到oracle表中。

我的ctl文件如下

load data
truncate 
CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
into table sch1.tbl1
fields terminated by '[#EOC#]'
trailing nullcols (
  field       filler,   
  a_id        integer external,
  h_id        integer external,
  title       char(128),
  descn       char(4000),
  risk        char(4000),
  comment     char(4000) terminated by '[#EOR#]')

在oracle sch1.tbl1表中,列冒险的数据为“这是回车字段”而不是 “这

     carriage return  field'

我尝试用字符串[#crlf#]替换char(10)并在ctl中使用replace函数,如下所示

load data
    truncate 
    CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
    into table sch1.tbl1
    fields terminated by '[#EOC#]'
    trailing nullcols (
      field       filler,   
      a_id        integer external,
      h_id        integer external,
      title       char(128),
      descn       char(4000),
      risk        char(4000) "replace(:risk,[#crlf#],chr(10))"
      comment     char(4000) terminated by '[#EOR#]')

sql loader错误说明SQL * Loader-309:不允许SQL字符串作为字段规范的一部分;我相信因为我的列是CLOB数据类型,所以我无法使用替换函数。

请帮助我使用sqlloader将带有cr / lnFeed的sql server中的数据加载到oracle表中。提前谢谢。

1 个答案:

答案 0 :(得分:1)

这是适合我的解决方案。 不是用[#crlf#]替换提取的平面文件中的回车/换行符(cr / lf),而是在提取的数据文件中保留cr / lf。 然后我改变了我的ctl文件,用INFILE Clause处理cr / lf文件名和&#34; str&#39; \ n&#39; &#34 ;.对于Unix env,我们需要\ n,对于windows,我们可以使用\ n或\ r \ n。

见下文

load data INFILE 'filename.dat' "str '\n'" 
    truncate 
    CONTINUEIF NEXT preserve (1:7) <> "[#BOR#]"
    into table sch1.tbl1
    fields terminated by '[#EOC#]'
    trailing nullcols (
      field       filler,   
      a_id        integer external,
      h_id        integer external,
      title       char(128),
      descn       char(4000),
      risk        char(4000),
      comment     char(4000) terminated by '[#EOR#]')

我测试了它并且数据加载了cr \ lf ..我需要做更详细的测试,截至目前我测试了一个表我还有更多。 同时,如果任何人有更好的解决方案,我会非常乐意尝试。