首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用RFC_READ_TABLE时出现DATA_BUFFER_EXCEEDED错误?

调用RFC_READ_TABLE时出现DATA_BUFFER_EXCEEDED错误?
EN

Stack Overflow用户
提问于 2010-11-12 22:21:33
回答 3查看 17.7K关注 0票数 11

我的java/groovy程序从用户输入接收表名和表字段,它查询SAP中的表并返回其内容。

用户输入可能涉及表CDPOSCDHDR。在阅读了SAP文档和googling之后,我发现这些都是存储更改文档日志的表。但是我没有找到任何可以在java中用来执行这种查询的远程调用函数。

然后,我使用了废弃的RFC Function Module,并尝试只依赖于这个RFC构建定制的查询。然而,我发现如果我传递给这个RFC的期望字段的数量大于2,即使我限制了最大行数,我也总是得到DATA_BUFFER_EXCEEDED错误。

我没有被授权成为SAP系统中的ABAP开发人员,也不能向现有系统添加任何FM,因此我只能用JAVA编写代码来实现此要求。

我做错了什么吗?你能在这个问题上给我一些提示吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-13 03:05:47

仅当要读取的字段的总宽度超过DATA_BUFFER_EXCEEDED参数的 width 时,才会发生DATA。它与的行数无关,而与单个dataset的大小有关。

所以问题是:FIELDS参数的内容是什么?如果为空,这意味着“读取所有字段”。CDHDR的宽度是192个字符,所以我假设问题出在CDPOS,它的宽度是774个字符。主要问题是字段VALUE_OLDVALUE_NEW,这两个字段都是245个字符。

即使您没有获得开发人员访问权限,您也应该促使某人获得只读字典访问权限,以便能够详细检查结构。

无耻的插件:RCER包含一个用于RFC_READ_TABLE的包装类,该类负责字段处理,并确保所选字段的总宽度低于函数模块施加的限制。

还要注意的是,在生产环境中,这些表可能非常庞大--比如数十亿个条目。通过对这些表执行过多的读取操作,您可以轻松地使数据库彻底停止。

PS:RFC_READ_TABLE不是根据SAP 382318发布给客户使用的,note 758278建议您创建自己的功能模块,并提供了一个具有改进逻辑的模板。

票数 17
EN

Stack Overflow用户

发布于 2019-12-18 03:46:59

请改用BBP_RFC_READ_TABLE

票数 1
EN

Stack Overflow用户

发布于 2013-06-07 00:44:02

有一种方法可以绕过DATA_BUFFER_EXCEED错误。尽管根据SAP OSS备注382318,此函数未发布供客户使用,但您可以通过更改向此函数传递参数的方式来解决此问题。导致错误的不是单个字段,但是如果数据行超过512字节,则会引发此错误。CDPOS肯定会有这个问题!

如果您知道如何使用Jco和pass表参数调用函数,那么解决方法是指定希望返回的确切字段。然后,您可以将返回的结果保持在512字节的限制内。

使用您的表CDPOS示例,指定类似下面的内容,您就应该可以使用了……(要小心,CDPOS可能会变得很庞大!)您应该指定并传递一个where子句!)

FIELDS = 'OBJECTCLAS'....FIELDS = 'OBJECTID‘

在Java中,它可以表示为..

listParams.setValue(this.getpObjectclas(),"OBJECTCLAS");

通过限制要返回的字段,可以避免此错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4165551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档