点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我想将数据块(每次10万条记录)下载到本地系统中。 在这里,我正在使用游标来做到这一点。 但是,只要系统要求用户更改或创建文件并导致转储,游标就会隐式关闭。
在第二次获取期间,我正在获取转储。 我尝试将光标与'WITH HOLD'一起使用以避免隐式关闭,但我一直遇到相同的错误。 有什么办法可以避免这种情况。
我的代码:
数据:lfa1的itab类型表, * lfa1的it2类型表, 当前类型光标 file_no TYPE i, c(1), 路径TYPE字符串VALUE'F:\'。 带有cur的OPEN CURSOR用于SELECT * FROM lfa1。 做。 在表itab包大小100000中获取下一个光标。 如果sy-subrc ne 0。 出口。 万一。 path ='F:\'。 file_no = file_no + 1。 c = file_no。 CONCATENATE路径'file'c'.csv'INTO路径。 通话功能'GUI_DOWNLOAD' 出口 * BIN_FILESIZE = FILENAME =路径 桌子 DATA_TAB = Itab。 ENDDO。 CLOSE CURSOR当前。
错误:
ABAP类别编程错误
运行时错误DBSQL_INVALID_CURSOR
除外。 CX_SY_OPEN_SQL_DB
未分配应用程序组件
短文本:光标已关闭或尚未打开。
正如文档所述,WITH HOLD选项仅保护您免受通过本机SQL执行的提交。 对于通常会关闭光标的GUI交互而言,它无效,因此您必须使用某种解决方法,例如使用表的主键来拆分记录:
最新代码:
您还可以使用EXPORT/IMPORT到DB的概念。
->将数据保存在群集中时->保留群集名称,例如TABLE1、2、3->,以便在下载时易于理解。 一旦数据保留下来,就可以循环下载或执行操作。
只需获取所有集群->遍历它并下载数据。 下载后,从群集中删除数据。
因此,从本质上讲,您希望能够将任何数据库表下载到PC。 对我来说似乎有点疯狂的要求。 目的是什么? 将SAP数据库备份到PC?
嗨,Sandra Rossi,
我的意思是,我将使用您的建议在运行时定义一个where条件。
当我的数据较少时,上面的代码也以相同的方式工作。 使用上面的代码,如果我尝试下载10万个打包大小为10万个记录的记录,则我必须获取65次而不是10次。 不幸的是,我要获取数百万个记录(在极少数情况下为数十亿个),这种方法将比您花费更多的时间。
我只是想说,您的方法更可行。
谢谢
谢谢。 我说使用SELECT而不是OPEN CURSOR在视觉上更加紧凑。
带有WHERE和向上行的OPEN CURSOR:
在技术上与以下命令相同:
两者之间在数据库方面没有明显的性能差异。 功能没有差异(当然会有一些差异,但是在我们当前的案例中没有使用它们。)
事实上,我确实没有在讨论您的确切问题,这只是一般信息。
p>
SELECT不太详细。 据了解,您因此选择SELECT。
一周热门 更多>