我从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表中。提前谢谢。