SAP 通过游标(OPEN CURSOR)读取数据
1.代码:
- 每次执行FETCH NEXT CURSOR xx INTO xxxx,游标的对象都将向下移动
- 考虑到游标的特殊性质,应该对两个游标的取数做严格的排序策略
TABLES: vbak. DATA: wa_vbak TYPE vbak, wa_vbap TYPE vbap, wa_wbap_tmp TYPE vbap. "缓存cursor位置 DATA: c1 TYPE cursor, c2 TYPE cursor. RANGES: s_vbeln FOR vbak-vbeln. s_vbeln-sign = 'I'. s_vbeln-option = 'BT'. s_vbeln-low = '2100000112'. s_vbeln-high = '2100000113'. APPEND s_vbeln. OPEN CURSOR c1 FOR SELECT * FROM vbak AS a WHERE vbeln IN s_vbeln ORDER BY vbeln. OPEN CURSOR c2 FOR SELECT * FROM vbap AS a WHERE vbeln IN s_vbeln ORDER BY vbeln posnr. DO. FETCH NEXT CURSOR c1 INTO wa_vbak. IF sy-subrc <> 0. "读不到数据,退出 EXIT. ENDIF. WRITE: / |采购订单号-抬头:{ wa_vbak-vbeln }|. "写抬头 DO. IF wa_wbap_tmp IS NOT INITIAL. wa_vbap = wa_wbap_tmp. "还原cursor位置 CLEAR wa_wbap_tmp. WRITE: / |采购订单号-行:{ wa_vbap-vbeln } 采购订单行号-行:{ wa_vbap-posnr }|. "写行项目 ELSE. FETCH NEXT CURSOR c2 INTO wa_vbap. IF sy-subrc <> 0. EXIT. ENDIF. IF wa_vbap-vbeln = wa_vbak-vbeln. WRITE: / |采购订单号-行:{ wa_vbap-vbeln } 采购订单行号-行:{ wa_vbap-posnr }|. "写行项目 ELSE. wa_wbap_tmp = wa_vbap. "记录cursor位置 EXIT. ENDIF. ENDIF. ENDDO. ENDDO. CLOSE CURSOR: c1, c2.
2.结果
- 输出
- 如果对 CURSOR c2不进行排序,则达不到预期效果
post SAP-Garson
原文链接:https://blog.csdn.net/qq_30797051/article/details/123707196文章来自于网络,如果侵犯了您的权益,请联系站长删除!