1

在执行 DB2 ( V8 ) 存储过程时,我收到以下错误:

SQL0304N 无法将值分配给主变量,因为该值不在主变量的数据类型范围内。SQLSTATE=22003

我没有设置任何类型的跟踪或特定的错误处理,并且由于错误只发生在我不允许使用的客户验证环境中,所以我没有太多选择,只能再次分析我的代码。

这是我当前分析的结果。谷歌帮不上什么忙……

我的“10 页”过程在一组数据上创建了一个 CURSOR,通过它并计算每个元素的值以将其插入表中。

我已经(希望)检查了我所有的变量类型与用于填充它们的数据类型以及目标表的数据类型,我没有看到任何冲突。

由于有很多十进制数、乘法和加法,我唯一的假设是计算值对于定义的变量来说变得太大了。谁能确认那将是“正确的错误”?如果计算生成的小数点后的位数大于目标变量类型所允许的位数(例如十进制(6,2)中的 100000.123),它是否也适用?

我还试图找到一种通过客户端调试 db2 pl sql 的方法,但我没有找到任何解决方案。如果你有什么建议...

非常感谢您提供任何线索:)

4

1 回答 1

1

我自己回答...

首先,我的最后一个问题 => 我没有找到通过客户端调试 db2 pl sql 的任何方法(至少使用 DB2 V8)。

在我被授权在我们的集成客户端环境中工作后,我可以确认我的假设是正确的。接收乘法的变量格式有时对于计算结果来说太小(十进制(10,2))。

采用的解决方案是将变量格式更改为小数(15,2),并且由于根据客户的要求插入的最终值仍然必须是小数(10,2),我们与客户验证了以下内容:

1-检查变量值:

if (myval > 9999999,99)
then 
  set myval = 9999999,99;
end if; 

=>“回到十进制(10,2)要求”

2-在插入时返回小数(10,2):最后一点代码也解决了小数点后数字过多的问题。这也在插入时导致错误

insert into mytable values (
... ,
CAST(myval AS DECIMAL( 12 , 2 )),
...
)
于 2012-09-06T14:14:29.183 回答