DB2数据库在使用load命令导入问题

在使用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码。









你可能感兴趣的:(DB2)