暂无图片
JDBC使用绑定变量,9个字符升级为128位
我来答
分享
Crouse
2023-03-24
JDBC使用绑定变量,9个字符升级为128位

数据库环境:12.2

JDK:java jdk8

使用 mybatis 连接数据库,插入9个字符后,发生绑定变量升级,字符长度从32位升级至128位,bind mismatch(22)


测试过程:

表: create table t ( x1 number,x2 varchar2(2001) )

java :

StringBuilder sb = new StringBuilder("x");
for( int i =1 ;i < 2000 ;i++){
cimTestMapper.insertX(i,sb.toString());
sb.append("x");
}
复制
我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
刘贵宾

你这个错误通常出现在使用绑定变量的SQL语句中,由于数据类型或长度不匹配导致绑定变量与实际参数值不一致,从而导致报错。

在你的情况下,可能是因为你绑定变量的长度为32位,但实际传入的值长度超过了32位,所以发生了绑定变量升级。

解决办法可以是在SQL语句中将绑定变量的长度扩展到128位,例如:


INSERT INTO my_table(col_name) VALUES(:col_value);
可以改为:


INSERT INTO my_table(col_name) VALUES(:col_value VARCHAR2(128));
另外,也可以检查一下你传入的参数值是否与绑定变量的数据类型和长度匹配。如果数据类型或长度不匹配,也会导致绑定变量升级,从而出现该错误。

暂无图片 评论
暂无图片 有用 3
打赏 0
暂无图片
Crouse
题主
2023-03-27
不是这个问题,下楼我会放个图
Crouse


暂无图片 评论
暂无图片 有用 2
打赏 0
Crouse
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
打赏 0
Crouse


传红框里面的字符串,就会导致绑定变量升级,从32位升级到128位。而实际上只有9位字符

暂无图片 评论
暂无图片 有用 0
打赏 0
我变秃了也变强了

请问你这个问题后来有查到原因吗?我也遇到了一个类似的问题,使用mybatis执行查询sql,都采用了绑定变量的方式传参,其中有个参数字段是varchar2类型,传入的值是*,数据库后台查v$sql_bind_capture里执行信息,同样的参数语句下MAX_LENGTH有时候是32有时候是128

暂无图片 评论
暂无图片 有用 0
打赏 0
Crouse
题主
2023-04-21
还没有
回答交流
Markdown


请输入正文
提交
相关推荐
除了crsctl命令,还有哪些工具可以管理Oracle集群资源?
回答 1
已采纳
‌olsnodes‌:这是一个节点查看工具,用于显示集群节点的信息,包括节点编号、私有互联名称、虚拟IP名称等‌。‌oifcfg‌:用于定义和修改Oracle集群所需的网卡属性,包括网卡的网段地址、子
Oracle 建表的时候没有创建子分区, 如果想增加只能重新创建表吗?
回答 1
已采纳
12c开始可以直接modify
Oracle数据库一启动,存储I/O就基本100%繁忙,请教各位专家会是什么问题吗?
回答 2
iostat的情况和top的情况贴一下
迁移对象问题
回答 3
好的,多谢
Oracle-11.2.0.1版本 是不是无法支持OGG的集成模式?只能用经典模式?
回答 3
是的哦,要升级到11.2.0.4,并且修改兼容性版本到11.2.0.4,要不就是有限支持
CTAS有什么办法加快效率吗
回答 5
已采纳
不要使用并行,并行对这种LOB数据不起作用的,建议把文本数据和LOB数据分开操作,文本数据比较小,可以通过CTAS方式一次迁走,LOB数据建议多分几个批次。
rac 12.2.0.1 on redhat7.4 执行root.sh时遇到 CLSRSC-400 ACFS-9428 OUI-67064
回答 3
上传附件:rootcrsdb0120210331083352PM.log
数据量大的表该怎么提升查询速度
回答 11
执行计划里面有没有回表?索引本身的碎片问题严重吗?
Oracle 大页
回答 1
已采纳
HugePages大小应大于集群上所有数据库sga的总和。(包括asm实例)。并且需要禁用oracle内存管理才可以启用大页面。HugePages设置内存(KB)/HugePagesize&nbsp;
如何在Oracle官方文档查看视图以及参数大全
回答 2
参考官方文档各个版本&nbsp;DatabaseReference