如何在打开的游标中捕获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解析器。 新的解析器将检查更严格,您可能会得到异常。

ZJXianG
2楼-- · 2020-09-16 04:53

感谢伙计,
但是我的问题是游标,它没有在任何sap系统中抛出任何异常,只是 使系统崩溃并终止程序,因此调用程序将无限期等待某些响应。

我正在从Java程序中调用某个功能模块,而该功能模块正在调用该程序,该程序通过http send将数据发送到Java程序,但是如果由于上述问题而导致该程序崩溃,那么在这种情况下,我的Java程序将

空代码
3楼-- · 2020-09-16 05:12

BCD_OVERFLOW不是SQL,而是ABAP异常,如果将太大的值分配给type p字段,则会发生这种情况。 可以在此处找到相应的异常类: https://help.sap.com/http.svc/rc/abapdocu_752_index_htm/7.52/zh-CN/index.htm?file=abenueb-abfb-sysexc.htm 。 如果将其包装在旧的Open SQL中,则无法对其进行处理。

因此,您的问题出在FETCH语句的INTO子句的ABAP一侧。 提供正确的目标工作区域,一切都很好。

奄奄一息的小鱼
4楼-- · 2020-09-16 04:54

我很清楚您的问题是什么,并且没有试图回答。 我只是指出它有缺陷,并要求您确保在发布代码时将其放入代码块中。

骆驼绵羊
5楼-- · 2020-09-16 04:51

允许的其中的哪个 -异常(例如,在CX_SY_DYNAMIC_OSQL_SYNTAX或CX_SY_DYNAMIC_OSQL_SEMANTICS中)?

hongfeng1314
6楼-- · 2020-09-16 04:58

为什么不在构建WHERESTR变量的位置测试边界, 而不是尝试在SELECT时处理错误,因为无论如何似乎都无法处理该错误?

更新:抱歉,似乎有时可以捕获,取决于所使用的旧的或严格的Open SQL以及所使用的数据库的类型。

打个大熊猫
7楼-- · 2020-09-16 04:51

"并且在光标中,我们不能使用" INTO @any_variable"。 错误,请参见

下的示例

https: //help.sap.com/http.svc/rc/abapdocu_752_index_htm/7.52/zh-CN/index.htm?file=abapfetch.htm

一周热门 更多>