ABAP 动态生成内表的几种方法
2014-08-19 11:45
295 查看
最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了。网上讲述的创建动态内表的方法大致有两种。我做了一下测试,源代码附后。在这里提醒大家一点,在做动态更新程序的时候,要注意两点:
1.使用modify (p_tabname) from <dyn_wa>. 的时候,一定要确定要更新的字段是不是系统表的关键字段,如果是关键字段的话,需要先删除这条记录,delete (p_tabname) from <dyn_wa>.再进行modify,因为modify进行更新的时候如果不存在就新增,这点一定要注意。
2.如果使用UPDATE进行更新,对于非主键字段的改变还是可以的,但是对于主键字段,只能用MODIFY了。直接对SAP数据做UPDATE和MODIFY是很危险的,不到万不得已,最好不要做这些操作。如果万一出问题,会很严重的。这里就不用更新和删除程序作为测试程序了,直接做一个动态内表ALV显示的测试程序,道理和更新与删除差不多,希望对有这方面需求的朋友有所帮助!
3.最近从同事程序中发现另一种创建动态内表的简便方法,附3中为测试代码。觉得这个方法更简单些……
附1:
View Code
程序显示截图如上所示:
1.使用modify (p_tabname) from <dyn_wa>. 的时候,一定要确定要更新的字段是不是系统表的关键字段,如果是关键字段的话,需要先删除这条记录,delete (p_tabname) from <dyn_wa>.再进行modify,因为modify进行更新的时候如果不存在就新增,这点一定要注意。
2.如果使用UPDATE进行更新,对于非主键字段的改变还是可以的,但是对于主键字段,只能用MODIFY了。直接对SAP数据做UPDATE和MODIFY是很危险的,不到万不得已,最好不要做这些操作。如果万一出问题,会很严重的。这里就不用更新和删除程序作为测试程序了,直接做一个动态内表ALV显示的测试程序,道理和更新与删除差不多,希望对有这方面需求的朋友有所帮助!
3.最近从同事程序中发现另一种创建动态内表的简便方法,附3中为测试代码。觉得这个方法更简单些……
附1:
*&---------------------------------------------------------------------* *& Report YDEMO_RICK *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ydemo_rick. PARAMETERS p_name TYPE tabname. DATA: dyn_table TYPE REF TO data. DATA: dyn_wa TYPE REF TO data. FIELD-SYMBOLS: <dyn_table> TYPE table, <dyn_wa> TYPE any. *创建动态表结构 CREATE DATA dyn_table TYPE TABLE OF (p_name). *创建动态内表 ASSIGN dyn_table->* TO <dyn_table>. *创建动态工作区结构 CREATE DATA dyn_wa LIKE LINE OF <dyn_table>. *创建动态工作区 ASSIGN dyn_wa->* TO <dyn_wa>. *从动态表中取数到动态内表中 SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO 100 ROWS FROM (p_name). *对取出数据进行处理 LOOP AT <dyn_table> ASSIGNING <dyn_wa>. "内表数据处理 ENDLOOP. *显示内表中的数据 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_structure_name = p_name TABLES t_outtab = <dyn_table> EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
View Code
程序显示截图如上所示:
相关文章推荐
- ABAP 动态生成内表的几种方法
- ABAP 动态生成内表的几种方法(Several Methods of Dynamic Internal Table Creation)
- ABAP 动态生成内表的几种方法
- ABAP 动态生成内表的几种方法
- ABAP 动态生成内表的几种方法(Several Methods of Dynamic Internal Table Creation)
- ABAP动态生成内表的三种方法
- jQuery动态生成html元素的几种方法
- ABAP 动态生成内表的3种方法(…
- jq给动态生成的标签绑定事件的几种方法
- 动态生成静态页面的几种方法
- ABAP 动态生成内表的两种方法(Two Methods of Dynamic Internal Table Creation)
- jquery 给动态生成的标签绑定事件的几种方法总结
- 【Unity教程】UGUI中如何动态生成精灵的几种方法
- 动态生成静态页面的几种方法
- 还是一个动态生成列的问题,比较彻底的解决方法(MVP思归)
- 将动态aspx页面转换成为静态html页面的几种方法
- 一个简单的 动态页面 生成 静页面的方法
- 将动态aspx页面转换成为静态html页面的几种方法
- 几种有益与代码生成的好方法
- PHP对GB编码动态转UTF-8编码的几种方法评测