系统运行时总报"streams type cannot be used in batching"错误,从字面错误来看sql肯定是本batching和streams有关,即批量操作和设计大字段(blob,clob),以下以lob代替。
问题原因直接判断lob字段问题,结果实际表根本没有lob类型的字段
翻查insert into语句来看,确实用了batch操作,而sql中并未按照lob的操作方式来处理,即要先插入一个empty_clob()值,再使用select col from table for upate方式, 例
update FX_FA_JCB set JC_BG = ? WHERE FA_DM = ?
SELECT JC_BG FROM FX_FA_JCB WHERE FA_DM=? FOR UPDATE
到此感觉就是insert语句错误,但是问题挺奇怪,本次sql错误大部分都能执行成功,个别几个不行,就仔细看了看要插入的表,表里根本没有lob类型的字段,那不可能报streams字样的错误提示呀,问题很怪异。网上搜了一把,都是关于lob字段的描述。决定调试一下看看。
怪异问题的前因找到了:插入值中有乱码
调试时,查看了sql的参数值,都是字符串类型,且都不长,不应该报这个错误呀。重新调试了一下,逐个查看参数值,发现有个参数值是这样的"<?xml version="1.0" encoding="UTF-8"?><zbkzxx><zbyxx><zby dcxxsbm="wcjyd" mc="外出经营地" value="��������������"/><zby dcxxsbm="yswdjd" mc="税务登记地" value=""/><zby dcxxsbm="yxqq" mc="外出经营活动税收管理证明有效期起" value="20130311"/><zby dcxxsbm="yxqz" mc="外出经营活动税收管理证明有效期止" value="20130811"/><zby dcxxsbm="wszg" mc="文书字轨" value="������"/></zbyxx></zbkzxx>",值中有乱码,理论上乱码也不应该有问题呀,抱着尝试的心理,就在调试阶段直接把内存中的乱码值改为了正常的字符,f8直接下去,sql执行成功了,问题发现了,查询数据库,表中中文列都是乱码,把表数据重新了一下后,再运行,一切正常,看来就是数据问题造成的。但还是觉得怪异,普通的varchar2类型怎么抛出这样的错误信息。
怪异问题的原因找到了:classes12.jar驱动包问题
使用plsql,分别把客户端设置为gbk,utf-8字符集,使用乱码的字符串做insert,都没有问题,那这肯定跟数据库无关。焦点又盯上了驱动包,查找应用使用的驱动包,发现用的是classes12.jar,把jar换成ojdbc14.jar,使用乱码数据尝试了一下insert,果然没有问题,问题就在classes12.jar身上。
应用在选择jdbc驱动包时一定要慎重,查了一下,classes12.jar是在低级JDK版本1.2与1.3中使用的驱动,虽然实际上在1.4,1.5中使用大部分情况也是OK的。建议驱动包还是根据jdk来选择对应的驱动包。
相关推荐
Oracle LOB字段处理工具是一款简单的lob字段处理工具
测试oracle数据库中,lob字段在不同...测试1 测试disable storage in row下的lob字段 测试2 测试非disable storage in row模式下 该模式为默认模式,既小于4k的数据不会存在lob中,只有大于4k的数据才会存在lob字段中
本文档主要介绍如何对LOB字段进行处理本文档主要介绍如何对LOB字段进行处理
NULL 博文链接:https://liubing1883.iteye.com/blog/405679
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
Oracle数据库中LOB的调优.pdf
Oracle中LOB字段的存储管理和优化.pdf
包含了官方权威说明。而且有LOB字段的日常维护总结,方便大家交流学习。
详细解释lob字段在DB2中的存储及处理过程, 主要基于IBM Z平台。
NULL 博文链接:https://sosuny.iteye.com/blog/446112
exts can be found in the LOB manual (external link). This corpus is the British counterpart of the Brown Corpus of American English. which contains texts printed in the same year so that comparison ...
分享一个来自官方的对Oracle LOB字段的性能调优。
NULL 博文链接:https://hackpro.iteye.com/blog/1845366
oracle dbms_lob
sybase IQ LOB手册,这个功能能让你在IQ中村图片和视频
Mastering LOB Development for Silverlight 5 : A Case Study in Action Management applications, also known as Line of Business (LOB) applications, constitute a great piece of the pie, that is the ...
oracle expdp导出blob字段遇到ora-01555报错的解决方案
通过spring存blob和clob数据到sybase数据库中,压缩包里包含了三种方式,(1)spring+hibernate,切面事务(aop),存lob数据,(2)spring+hibernate存lob数据,(3)spring+jdbc存lob数据。
前端开源库-lobLOB,LOB API包装
只需要安装oracle client在本地,然后配置好tns,输入连接名,用户名,密码,数据表的名称,文件名数据列名以及blob数据列名,就可以批量导出ORACLE数据库BLOB字段生成图片