关键词
- 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、关于搜索引擎:
- SAP search: http://search.sap.com/ (本次的SAP note的号13607就是在上面找到的)
SAP Note: https://websmp206.sap-ag.de/NOTES (搜索关键字在错误日志里面有提供)
SAP定制的谷歌搜索引擎
https://cse.google.com/cse/home?cx=013447253335410278659:k8ob9ipscwg
本文档详细介绍了在SAP系统中遇到'Error in module RSQL of the database interface'错误的解决过程。从问题描述、分析、原因到解决办法,包括查阅SAP Note 13607,调整代码,重新发布等步骤。

1369

被折叠的 条评论
为什么被折叠?



