我现在做一个BI项目的ETL部分,就是把ORACLE中的数据导出成一个文件,然后在导入DB2数据库
现在在抽取ORACLE数据导出成一个文件时遇到了问题
这个抽取程序我是用C语言编写,用的是ORACLE的OCI函数
具体导出原理如下
比如ORACLE中一个表,表名为tb1,其中有两个字段a,b
在程序里,会拼成这样一个SQL语句
select a||' '||b from tb1
字段之间用TAB键分隔,||' '||为一个TAB
然后根据这个SQL使用OCI函数把这个表里的数据导出成一个文件
现在遇到的问题是,当遇到某条记录对应的所有字段长度总和大于4096字节时,即比如a||' '||b 超过4096字节时,
抽取就会中断,这条记录后面的记录就无法在导出了
在PL/SQL也会出现这个问题,当用select a||' '||b from tb1
这条语句查询时,遇到某条记录长度之和大于4096.即比如a||' '||b 大于4096时,后面的数据就不在显示了
请教高手,这个问题该如何解决?好像ORACLE对查询中的单个字段的长度大小限制就是4096字节吧

解决方案 »

  1.   

    oracle处理列的最大长度是4000,因为用的是a||' 'b,所以,oracle当做一列来处理。转换一下,用a||','||b, 用, 代替 tab, 不过要更改一下数据导入的机制
      

  2.   

    用a||','||b同样会出问题,要用ETL程序来拼接而不是通过SQL来拼。
      

  3.   

    用to_clob试试,把a||' '||b改为to_clob(a)||' '||to_clob(b)
      

  4.   

    如果是在sql查询中 那个长度是有楼主所说的限制的
    但是如果在plsql存储过程或者函数之类的程序里面 字符串的长度是大概是4万  所以一般不会出现限制
    只不过,那个字符串的值你在表面看不到 其实他还是起作用的