SQLULDR2的自定义转义符处理


有一天晚上, 花了三个小时阅读了NOSQL的一些东东, 发现如果要将Oracle的数据分发到多台NOSQL中去处理的话, 还是得用文本方式, 但SQLULDR2却不支持, 原因竟然是因为转义符处理的问题. 比如对于MySQL, 需要将回车, 换行, 单引号, 双引号进行转义处理; 而对于某些NOSQL, 则需要处理回车, 换行, 和TAB键; 很显然, 要使SQLULDR2更为通用, 就要解决转义符处理的问题.
    何为转义处理? 比如某些NOSQL要求将表的多个列数据用TAB键分隔, 但是字段值中也有可能出现TAB键啊? 这时怎么处理呢? 就要将将字段值中的TAB键换成字符串"\t", 这样NOSQL才能准确识别文本文件中多个列的数值, 也可以理解为特殊字符处理.

    为了灵活进行转义处理, 在SQLULDR2中新增了两个命令行选项, "ESCF"和"ESCT", 表示"Escape From"和"Escape To"的含义.

escape  = escape character for special characters
escf    = escape from characters list
esct    = escape to characters list
    如果指定了转义符(ESCAPE选项), 则对于ESCF中的每一个字符, 都会被替换成转义符加上ESCT中对应位置的字符. 比如:

USER=SCOTT/TIGER
ESCAPE=\
ESCF=123456789
ESCT=123456789
QUERY=SELECT 'ABC,123456789' AS COL1 FROM DUAL
FILE=-
    用SQLULDR2去执行, 得到以下输出:

C:\>sqluldr2 parfile=test.par
ABC,\1\2\3\4\5\6\7\8\9
    可以看到在导出时, 所有的数字前面都加了一个转义符, 在这个例子中是反斜杆. 有了这个功能, 我们可以来指定MySQL适用的转义处理.

ESCAPE=\
ESCF=0x0d0x0a'"
ESCT=rn'"
    也可以指定NOSQL适用的转义处理.

ESCAPE=\
ESCF=0x0d0x0a0x09
ESCT=rnt
    而Oracle, Sybase或SQL Server中, 要将数据导出成一条一条Insert语句时, 只需要将字段值中的单引号替换成两上单引号即可


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3