DB2报错-302 22001

项目使用mybatis,发现某一where变量超过某个长度时,就会报错,-302 22001,但是生成的额SQL拷贝出来到toad中执行却不会出现此问题。

更改DB2环境变量解决

1.环境变量DB2_DEFERRED_PREPARE_SEMANTICS

DB2_DEFERRED_PREPARE_SEMANTICS是另一个和DB2的Oracle兼容特性相关的环境变量,它用来控制诸如Java或者C#编写的应用程序兼容性。如下所示,将该变量值设为YES:

 
 
  1. db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES 

这样做有什么好处呢?我们知道,从DB2 V9.7开始引入了隐式类型映射,它支持应用程序的动态语句中出现未定义类型参数标注符(Untyped Parameter Markers),但是这样的动态语句会在准备阶段报错。通过将db2set DB2_DEFERRED_PREPARE_SEMANTICS设置为YES,能避免在准备阶段求值,从而在执行阶段进行动态参数绑定,这为应用程序提供了动态绑定能力。

参考:http://book.51cto.com/art/201112/310691.htm

C:\UsersAdministrator>db2 ? sql-302

SQL0302N  EXECUTE 或 OPEN 语句中主变量的值超出了其相应的使用范围。

说明:

发现输入主变量的值对于其在 SELECT、VALUES 或预编译语句中的使用而言已超
出了范围。

发生了下列情况之一:

*  SQL 语句中使用的相应主变量或参数标记被定义为字符串,但是输入主变量包
   含的字符串太长。

*  SQL 语句中使用的相应主变量或参数标记被定义为数字,但是输入主变量包含
   的数值超出了范围。

*  C 语言以 NUL 终止的字符串主变量中丢失终止字符 NUL。

*  联合系统用户:在传递会话中,可能违反了特定于数据源的限制。

由于在 EXECUTE 或 OPEN 语句上的 SQLDA 中指定了不正确的主变量或不正确的

SQLLEN 值,因此发生此错误。

无法处理该语句。

用户响应:

确保输入主变量值的类型和长度正确。

如果输入主变量向参数标记提供值,那么使这些值与参数标记的隐含数据类型和
长度相匹配。

联合系统用户:对于传递会话,请确定哪个数据源导致该错误(参阅《故障诊断
指南》以了解标识失败的数据源所要遵循的过程)。

检查该数据源的 SQL 方言以确定违反了哪个特定限制,并根据需要来调整失败的
语句。

sqlcode:-302

sqlstate:22001, 22003

C:\Users\Administrator>db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

C:\Users\Administrator>db2set

DB2_DEFERRED_PREPARE_SEMANTICS=YES

DB2INSTOWNER=JIUWEI-PC

DB2PORTRANGE=60000:60003

DB2INSTPROF=C:\PROGRAMDATA\IBM\DB2\DB2COPY1

DB2COMM=TCPIP

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值