5.3.10 要加载的数据中有换行符怎么办
由于标准换行符也是SQLLDR识别数据行结束的标志符,因此要将含换行符的数据加载到表中稍复杂一点点,而且需要根据实际情况来处理,不同情况的处理方式也不一样,但基本思路是相同的,就是要同SQLLDR指明什么时候才需要进行换行操作。
5.3.10.1 手工指定的换行符
在手工指定换行符的情况下,数据文件中的换行符并不是标准的换行标志,而是用户自定义的一个标识字符(或多个字符组成),这种情况的处理比较简单,如数据文件如下:
- 10,SMITH,SALES MANAGER,This is SMITH.\nHe is a Sales Manager.
- 11,ALLEN.W,TECH MANAGER,This is ALLEN.W.\nHe is a Tech Manager.
- 16,BLAKE,HR MANAGER,This is BLAKE.\nHe is a Hr Manager.
示例代码保存为数据文件ldr_case11_1.dat。
我们可以通过控制文件,在数据加载前处理remark列的数据,将用户指定的"\n"字符替换为chr(10),即标准换行符,创建控制文件如下:
- LOAD DATA
- INFILE ldr_case11_1.dat
- TRUNCATE INTO TABLE MANAGER
- FIELDS TERMINATED BY ","
- (MGRNO,
- MNAME,
- JOB,
- REMARK "replace(:remark, '\\n',chr(10))"
- )
示例代码保存为控制文件ldr_case11_1.ctl。
这里需要注意的是,替换时必须指定"\\n"而不只是"\n",因为"\n"会被SQLLDR识 别成换行符并转换成换行标志,这样可能导致数据加载出错。而"\"是默认转义符,指定该转义符后SQLLDR就会将"\n"识别成普通字符了。哎呀!说了 半天,一会儿一个"\"一会两个"\",你可能都晕了,还是通过测试来说明吧。
执行SQLLDR命令加载数据:
- F:\oracle\script>SQLLDR SCOTT/TIGER CONTROL=LDR_CASE11.CTL
- SQL*Loader: Release 10.2.0.1.0 - Production on
- 星期一 3月 16 15:50:04 2009
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14019112/viewspace-663941/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14019112/viewspace-663941/