在使用load命令实现从客户端导入数据到服务器上时,
load client from 'G:\dysj\2014-12-31_CBOD_CICIECIF.del' of del modified by delprioritychar replace into CBOD_CICIECIF NONRECOVERABLE;
client 是表示客户端
'G:\dysj\2014-12-31_CBOD_CICIECIF.del' 我的路径,最好不要带中文
modified by delprioritychar 表示过滤换行空格,具体百度吧
CBOD_CICIECIF 我的表名
NONRECOVERABLE 表示表空间不备份,不然会报警告。
但是在执行上面命名时候还是暴力如下警告,导致数据插入不了。
报警告SQL3125W The character data in rows "F2-1" and column "1" was truncated
because the data is longer than the target database column.
Number of rows read = 21630 --读取到21630行
Number of rows skipped = 0
Number of rows loaded = 0
Number of rows rejected = 21630 --拒绝插入21630行
Number of rows deleted = 0
Number of rows committed = 21630 也就是说没有插入成功。
从上面的警告可以看出是第一rows(行)的第一列的源数据太长,而数据库表的相应列的字段太短,导致被截取出错。
初步怀疑是没有识别列的分隔符导致的错误。
在.del格式的文件下怎么确认列和列呢?也就是列的分隔符,用notepad打开显示有GS的分隔符,这是使用ascll作为隐藏的分隔符,查询得知GS的ascll十六进制是1D.load 改成如下语句就可以导入了
load client from 'G:\dysj\2014-12-31_CBOD_CICIECIF.del' of del modified by codepage=1386
coldel0X1D delprioritychar replace into CBOD_CICIECIF NONRECOVERABLE;
codepage=1386 --处理源文件中文导入产生的乱码。
coldel0X1D --处理分隔符,0X1D表示十六进制的GS(分组符,英文缩写,具体的就对照ascll码修改吧)
最近又遇到新的情况,在列里面有特殊字符,如“或者,等,load语法的del格式文件时默认”作为一列字符串的分隔符,如果包含",那么一列可能和下一个分号"这中间的所有字符作为一列,这样也会导致截取,导入数据不全,从而load只能导入一部分数据,这时候可以用chardel0X2C来确定字符串的分隔符,和coldel一样的含义,就不多说了,2C也可以换成其他ascii码。