如何在打开的游标中捕获BCD_OVERFLOW错误?

2020-09-16 04:47发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在尝试执行以下过滤查询:

带保持键c1的打开光标
     供选择(COL_STR)
         来自(JOIN_STR)
         多达行数
         地点(WHERESTR)
         GROUP BY(GROUPSTR)
         拥有(HAVESTR)
         ORDER BY(ORDERSTR)。
 做。
   将下一个游标c1捕获到表包大小PKGSIZE中。
   如果sy-subrc <> 0。
     关闭光标c1。
     出口。
   其他。
     使用PROCESS_STATUS执行PROCESS_DATA。
     如果PROCESS_STATUS NE为0。
       返回。
     万一。
   万一。
 ENDDO。


 

在" WHERESTR"中,我的zint8 ='9223372036854775808'。

并且字段zint8是INT8类型,在这里我知道INT8可以具有最大值,如922337203685477575807。在这种情况下,我想抛出一些边界值异常。 但是在这种情况下,我的程序没有抛出任何异常或任何值,而是直接终止。 在这里,我知道它应该引发BCD_OVERFLOW异常,但是与其引发任何异常或任何值,不如直接终止它。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我正在尝试执行以下过滤查询:

带保持键c1的打开光标
     供选择(COL_STR)
         来自(JOIN_STR)
         多达行数
         地点(WHERESTR)
         GROUP BY(GROUPSTR)
         拥有(HAVESTR)
         ORDER BY(ORDERSTR)。
 做。
   将下一个游标c1捕获到表包大小PKGSIZE中。
   如果sy-subrc <> 0。
     关闭光标c1。
     出口。
   其他。
     使用PROCESS_STATUS执行PROCESS_DATA。
     如果PROCESS_STATUS NE为0。
       返回。
     万一。
   万一。
 ENDDO。


 

在" WHERESTR"中,我的zint8 ='9223372036854775808'。

并且字段zint8是INT8类型,在这里我知道INT8可以具有最大值,如922337203685477575807。在这种情况下,我想抛出一些边界值异常。 但是在这种情况下,我的程序没有抛出任何异常或任何值,而是直接终止。 在这里,我知道它应该引发BCD_OVERFLOW异常,但是与其引发任何异常或任何值,不如直接终止它。

付费偷看设置
发送
9条回答
me_for_i
1楼 · 2020-09-16 04:55.采纳回答

尝试通过在变量和逗号分隔列表前面使用@来强制执行新的SQL解析器。 新的解析器将检查更严格,您可能会得到异常。

CJones
2楼-- · 2020-09-16 04:57
在7.52中 (HANA),此代码为:
 "旧的开放式SQL
 数据价格类型p长度1。
 尝试。
     从突发事件中选择单个价格,到价格> = 10的价格中。
   捕获cx_root INTO DATA(lx_root)。
 ENDTRY。
 "现在严格开放SQL
 尝试。
     从sflight选择单价到@price,价格> = 10。
   捕获cx_root INTO DATA(lx_root)。
 ENDTRY。
 

"旧开放SQL"和"严格开放SQL"语句均生成可捕获的CX_SY_SQL_ERROR,其中SQLCODE = 10811-和SQLMSG ="参数/列的数字溢出(1)源类型DECIMAL,目标类型DECIMAL,值"未知" "

因此,似乎它也取决于数据库。

灬番茄
3楼-- · 2020-09-16 05:07

是的,我也尝试调试。

一周热门 更多>