sqlloader导入csv文件一个棘手的问题!

lblzms 2010-03-15 05:34:04
这个csv比较特殊,有一列是用引号括起来,并且中间有逗号,这样控制文件的分隔符如果用逗号,这一列会报错,因为会把这一列拆分掉,请问各位大拿该如何写?

csv数据样式如下:

11532682,移动,MSCServer,JIHGS4,272345,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分50秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LIC-V1R6C5-NO LCS-ON1049046.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,

11532683,移动,MSCServer,HZGS21,638697,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分51秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LICR6C520100118.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,

11532684,移动,MSCServer,HZGS11,1409693,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分52秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LICR6C520100118.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,

11532685,移动,MSCServer,JIHGS5,206182,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分54秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LIC-V1R6C5-NO LCS-ON1049046.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,
...全文
475 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lblzms 2010-03-16
  • 打赏
  • 举报
回复
tangren 的方法可以解决这个问题了

还有个问题,类似 “2010年3月13日 01时19分50秒+08:00” 这样的日期在控制文件中怎样格式化成"yyyy-mm-dd hh24:mi:ss",我用CONFIRM_TIME "to_date(:CONFIRM_TIME,'yyyy-mm-dd hh24:mi:ss')" 这样方式报错
“记录 2: 被拒绝 - 表 SE_HW_ALARM_CURRENT 的列 CONFIRM_TIME 出现错误。
ORA-01861: literal does not match format string”

这个csv文件是我从服务器上取下来的,不是我生成的,所以我无法控制csv生成的格式。

[Quote=引用 4 楼 tangren 的回复:]

控制文件样例:

load data
infile c:\data.csv
truncate into table tab
fileds terminated by ',' optionally enclosed by '"'
trailing nullcols
(id
...
mydate date 'yyyy-mm-dd')
[/Quote]
xdy3008 2010-03-16
  • 打赏
  • 举报
回复
这个是比较特殊。

我认为你在做导出文件到CSV的时候,应该预先作处理。 比如引号用其他符号替换,或者加上预处理字符。


参考一些,不一定适合你需要:
http://blog.csdn.net/xdy3008/archive/2010/03/05/5349052.aspx
gltyi99 2010-03-16
  • 打赏
  • 举报
回复
可以在sqlldr 命令后加log=目录 输出日志,可以查询一下,具体的出错位置

还有就是你生成的csv数据,你可以将数据放到Excel中,然后在转成csv格式,这样可以避免你上面提到的特殊符号的问题了。
gltyi99 2010-03-16
  • 打赏
  • 举报
回复
可以把特殊的符号替换成其他的符号,导入后在替换回来
tangren 2010-03-16
  • 打赏
  • 举报
回复
控制文件样例:

load data
infile c:\data.csv
truncate into table tab
fileds terminated by ',' optionally enclosed by '"'
trailing nullcols
(id
...
mydate date 'yyyy-mm-dd')
oracledbalgtu 2010-03-15
  • 打赏
  • 举报
回复
把它们添加双引号引起来。


[Quote=引用楼主 lblzms 的回复:]
这个csv比较特殊,有一列是用引号括起来,并且中间有逗号,这样控制文件的分隔符如果用逗号,这一列会报错,因为会把这一列拆分掉,请问各位大拿该如何写?

csv数据样式如下:

11532682,移动,MSCServer,JIHGS4,272345,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分50秒+08:00,2010年3月13日 06……
[/Quote]
lblzms 2010-03-15
  • 打赏
  • 举报
回复
掉了一列,最后一列为时间类型,其他都是varchar2

11532682,移动,MSCServer,JIHGS4,272345,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分50秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LIC-V1R6C5-NO LCS-ON1049046.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,2010-03-14

11532683,移动,MSCServer,HZGS21,638697,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分51秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LICR6C520100118.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,2010-03-14

11532684,移动,MSCServer,HZGS11,1409693,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分52秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LICR6C520100118.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,2010-03-14

11532685,移动,MSCServer,JIHGS5,206182,License文件即将失效,软件系统,重要,已确认未清除 故障,2010年3月13日 01时19分54秒+08:00,2010年3月13日 06时51分55秒+08:00, ,wgjkwgjk,,"文件名=LIC-V1R6C5-NO LCS-ON1049046.dat, 位置=BAM, 剩余天数=37",,,,,2387,,ADAC,,,2010-03-14
lblzms 2010-03-15
  • 打赏
  • 举报
回复
最后一列为时间类型,其他都是varchar2

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧