点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我遇到了一个不寻常的情况,我有一个数据库表,其中一列的数据类型为DEC(长度6个小数3)
使用相同的代码,我为DEC字段创建了一个报告程序和参数。
REPORT ydec_test。 表ydec_test。 参数:p1类型ydec_test-seqno强制性, p2类型ydec_test-dec63强制性。 ydec_test-seqno = p1。 ydec_test-dec63 = p2。 ydec_test-dec63 = ydec_test-dec63 * 10."此处应溢出,DEC63> 999.999 尝试。 从ydec_test修改ydec_test。 写:'完成'。 捕获cx_sy_open_sql_db INTO DATA(lo_ref)。 写:/lo_ref-> get_text()。 ENDTRY。
我可以在选择屏幕中输入的最大值是" 999.999"
当我执行报告时,我应该在将值乘以10时得到溢出异常,结果将变为" 9999.990"。 这很奇怪,因为该字段在小数点前不应有4位数字。 修改数据库表时,出现溢出异常。
数据库返回了SQL代码314。错误文本:数字溢出:无法将值转换为DECIMAL(6,3):type_code = 5,index = 1
我想在计算值时不对DB执行操作时进行错误处理。 任何人都可以提出为什么系统会以这种方式运行。 为什么字段长度在ABAP中不同而在DB中不同?
谢谢,
Nooruddin Bohra
(39.0 kB)
调试,并检查P2的实际内部类型。 您应该看到它是P类型,长度为4。
在文档 DECm.n转换为P((m + n + 1)/2)
因此,您的 字段为6位数字。 因此,在abap中它将是类型为P的(6 + 1)/2 = 3.5个字节,四舍五入为4个字节。 一个字节的一半用于符号,因此每个数字留下7个半字节。 然后,ABAP中的限制为-9999.999至9999.999
TL; DR-DEC转换为ABAP类型P,该类型始终具有奇数个数字。
下面的编码将对照数据库的数字值检查ABAP的数字值。 因为在从ABAP类型到数据库类型的某些映射中,可能的最小/最大值和值集并不相同。
在您的特定情况下,您将获得SY-SUBRC <> 0返回。 这样,您知道数据库更新也将失败。
我还将为计算和数字转换构建一个TRY CATCH,以便在ABAP类型已经溢出的情况下,可以相应地处理异常。
大多数 可能,您将不需要进行decfloat转换,但是就我而言,在将自定义数据从一个系统加载到另一个系统时,我对许多不同的数值数据类型使用了此功能,因此我检查了源数据和目标数据之间可能存在的错误。/p>
您好,Venkat,
谢谢您的答复。
您正在尝试在乘法时捕获异常。 事情是没有例外发生的。 该值乘以10。
请参阅下文。 这就是问题所在。 它应该引发溢出异常,但不是。
致谢,
Nooruddin Bohra
好的Nooruddin,请尝试这种方式。 它应该可以正常工作
您好,Venkat,
感谢您的回复。 问题是乘法时不会溢出。 它不会用于CATCH块。
此致
Nooruddin
嗨
能否请您尝试以下两个步骤之一
选项1
选项2
亲爱的Nooruddin,
您可以使用如下的try catch语句
关于此,
Venkat
一周热门 更多>