解决Error in module RSQL of the database interface

本文档详细介绍了在SAP系统中遇到'Error in module RSQL of the database interface'错误的解决过程。从问题描述、分析、原因到解决办法,包括查阅SAP Note 13607,调整代码,重新发布等步骤。

关键词

  • Error in module RSQL of the database interface
  • error key: RFC_ERROR_SYSTEM_FAILURE
  • dbtran ERROR (set_input_da_spec): statement too big[dbtran.c#4854]
  • marker count = 18655 > max. marker count = 16000 [dbtran.c#4854]
  • sap note:13607

问题描述

【Problem】EP在开发机测试没问题,发布到生产机后执行查询出现了该问题:

这里写图片描述
错误信息:
Error in module RSQL of the database interface, error key: RFC_ERROR_SYSTEM_FAILURE

问题分析

你可以先尝试过以下操作:
1、检查、测试RFC,并把相关的请求传输到生产环境;
2、在NWDS中Reimport RFC,重新发布工程(注意生产环境发布的操作和开发机的不一样);
3、重启EP;
若仍然未解决问题,请往下看。

通过传输码ST22查看ABAP运行时错误日志
这里写图片描述
双击对应错误的日志,进入Runtime Error Long Text界面,里面有详细的错误报告。

我摘取部分的错误信息:

Kategorie(范畴): ABAP Programming Error
Laufzeitfehler(运行时错误): DBIF_RSQL_INVALID_RSQL
Ausnahme(异常) : CX_SY_OPEN_SQL_DB
ABAP Programm: SAPLZEWM_RFC2

【Kurztext】 (德文,意思是范畴)
Error in module RSQL of the database interface

【发生了什么】
Error in the ABAP Application Program
The current ABAP program “SAPLZEWM_RFC2” had to be terminated because it has come across a statement that unfortunately cannot be executed.

【错误分析】
An exception occurred that is explained in detail below.

The exception, which is assigned to class ‘CX_SY_OPEN_SQL_DB’, was not caught in procedure “ZTM_RFC_YSQSD_GETORDER_V2” (FUNCTION)”, nor was it propagated by a RAISING clause.

Since the caller of the procedure could not have anticipated that the exception would occur, the current program is terminated.

The reason for the exception is:
The SQL statement generated from the SAP Open SQL statement violates a restriction imposed by the underlying database system of the ABAP system.

Possible error causes:
o The maximum size of an SQL statement was exceeded.
o The statement contains too many input variables.
o The input data requires more space than is available.
o …

You can generally find details in the system log (SM21) and in the developer trace of the relevant work process (ST11).

原因分析

1、在ABAP的Select语句中,当在WHERE子句使用range table时,range table的类型超出了数据库的限制的最大值(这个最大值由DB决定)

2、源码位置在错误信息上面已经有列出了:
这里写图片描述

解决办法

1、查找SAP Note:13607,下面截取note的内容
这里写图片描述
这里写图片描述这里写图片描述

2、于是我修改我的代码:

DATA r_so LIKE RANGE OF vbak-vbeln WITH HEADER LINE. ”原句:DATA r_so FOR vbak-vbeln.
DATA lines LIKE LINE OF r_so.”添加的
DESCRIBE TABLE r_so LINES lines.”添加的
IF lines EQ 0.”添加的
    SELECT
      vbak~vbeln AS vbeln
      adrc~name1 AS name1 
      vbpa~kunnr AS kunnr
      vbpa~parvw AS parvw
      adrc~city1 AS city1
      FROM vbpa
      INNER JOIN vbak ON vbak~vbeln EQ vbpa~vbeln
      INNER JOIN adrc ON vbpa~adrnr EQ adrc~addrnumber
      INTO CORRESPONDING FIELDS OF TABLE gt_display_vbpa_ag
      WHERE adrc~name1 IN r_shippername 
        AND vbpa~kunnr IN r_shipper     
        AND vbpa~parvw EQ 'AG'.
...
ELSE.”添加的
    TRY.”添加的
      SELECT
         vbak~vbeln AS vbeln
         adrc~name1 AS name1
         vbpa~kunnr AS kunnr
         vbpa~parvw AS parvw
         adrc~city1 AS city1
         FROM vbpa
         INNER JOIN vbak ON vbak~vbeln EQ vbpa~vbeln
         INNER JOIN adrc ON vbpa~adrnr EQ adrc~addrnumber
         INTO CORRESPONDING FIELDS OF TABLE gt_display_vbpa_ag
         FOR ALL ENTRIES IN r_so ”添加的
         WHERE vbak~vbeln EQ r_so-low
           AND adrc~name1 IN r_shippername 
           AND vbpa~kunnr IN r_shipper     
           AND vbpa~parvw EQ 'AG'.

   CATCH cx_sy_open_sql_db.”添加的
   ENDTRY.”添加的
...
ENDIF.”添加的

3、修改过RFC后,在WD4J那里需要重新导入Model
这里写图片描述

4、重新把request传输到生产环境,重新发布到EP。问题已解决

总结一下解决SAP问题的思路

1、不做伸手党,不要一出错就问人,一定要阅读错误信息,分析出可能出错的部分,是RFC出错还是WD4J出错;
2、通过Tcode ST22 或 ST11 或 sm21可以查看错误信息;
3、关于搜索引擎:

本数据包括各地区的户数、人口数和性别比(城市、镇、乡村)各地区分性别、户口登记状况的人口(城市、镇、乡村)各地区分性别的农业户口、非农业户口人数(城市、镇、乡村)各地区分性别、受教育程度的6岁及以上人口(城市、镇、乡村)各地区分性别、婚姻状况的人口(城市、镇、乡村)各地区分性别的15岁及以上文盲人口(城市、镇、乡村)各地区分性别、月份的出生人口(城市、镇、乡村)各地区分性别、月份的死亡人口(2004.11.1-2005.10.31)(城市、镇、乡村)各地区家庭户的住房间数和面积(城市、镇、乡村)全国分民族人口及比重全国各民族分性别、受教育程度的6岁及以上人口全国各民族分性别的15岁及以上文盲人口全国各民族按生育孩次分的育龄妇女人数全国分年龄、性别的人口(城市、镇、乡村)全国分年龄、性别、受教育程度的6岁及以上人口全国分年龄、性别的15岁及以上文盲人口(城市、镇、乡村)各地区按性别、行业门类分的就业人口(城市、镇、乡村)全国按年龄、性别和行业门类分的就业人口(城市、镇、乡村)各地区按性别、职业大类分的就业人口(城市、镇、乡村)全国按年龄、性别、职业大类分的就业人口(城市、镇、乡村)全国按性别、受教育程度、行业门类分的就业人口(城市、镇、乡村)各地区按性别、受教育程度分的就业人口……
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值