设为首页 收藏本站
查看: 1198|回复: 0

[经验分享] [转载]SAP ABAP Internal Table 一些事

[复制链接]

尚未签到

发表于 2015-9-18 13:06:26 | 显示全部楼层 |阅读模式
[转载]SAP ABAP Internal Table 一些事
  
  

原文地址:SAP ABAP Internal Table 一些事作者:SAP立志
一. Internal Table 的宣告
ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔数据表示某个事物,多笔数据表示具有相同属性的多个事物.例如:
为了存取或记录某班的同学资料,我们创建如下的internal table:
DATA: BEGIN OF STUDENT OCCURS 20,
               STD_ID     TYPE N,
               NAME(10) TYPE C,
               AGE        TYPE I,
               BIRTH      TYPE D,
               SCORE      TYPE P DECIMALS 2,
        END OF STUDENT.
此时我们已经创建了名叫STUDENT的internal table,并且为它预先申请了能够存放20笔资料的Buffer(当然,如果存取资料不止20笔,程序执行时,会自动申请系统Buffer)
Internal table 的定义有以下几种格式:
格式一.     DATA: BEGIN OF <internal table>    OCCURS    <n>,
                     <field 1>    TYPE <type1>,
                    [<field 2>    TYPE <type 2>,
                     <field 3>    TYPE <type 3>,
                      …                    ]
                  END OF    <internal table>.
格式二.     TYPES: BEGIN OF <work area>,
                       <field 1>    TYPE <type1>,
                      [<field 2>    TYPE <type 2>,
                       <field 3>    TYPE <type 3>,
                      …                    ]
                   END OF <work area>.
            TYPES <internal table> TYPE <work area> OCCURS <n>.
格式三.      DATA: BEGIN OF <work area>.
                         INCLUDE STRUCTURE <table name>.
            DATA: END OF <work area>.
            DATA: <internal table> LIKE <work area> OCCURS <n>.
二. APPEND LINE
格式: APPEND [<work area>    TO ] <internal table>.
举例一. (使用work area)
DATA: BEGIN OF LINE,
               COL1 TYPE I,
               COL2 TYPE I,
        END OF LINE.
DATA    ITAB LIKE LINE OCCURS 10.
DO 2 TIMES.
       LINE-COL1 = SY-INDEX.
       LINE-COL2 = SY-INDEX ** 2.
       APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
        WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.
执行结果为:
1 1
2 4
举例二. (不使用work area)
          DATA: BEGIN OF ITAB OCCURS 10,
                       COL1 TYPE I,
                       COL2 TYPE I,
                END OF ITAB.
          DO 2 TIMES.
              ITAB-COL1 = SY-INDEX.
              ITAB-COL2 = SY-INDEX ** 2.
              APPEND ITAB.
          ENDDO.
          LOOP AT ITAB.
              WRITE: / ITAB-COL1, ITAB-COL2.
          ENDLOOP.
          执行结果与举例一相同.
举例三. (加入另一个Internal table的元素)
         格式: APPEND LINES OF <itab1> [FROM <n1> ] [TO <n2>] TO <itab2>.
         将<itab1>的元素加入至<itab2>中,可选取自<n1>至<n2>的范围.
         APPEND LINES OF ITAB TO JTAB.
三. COLLECT LINE
COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.
格式:    COLLECT [<work area> INTO ] <itab>
DATA: BEGIN OF ITAB OCCURS 3,
               COL1(3)    TYPE C,
               COL2       TYPE I,
         END OF ITAB.
         ITAB-COL1 = ‘ABC’.      ITAB-COL2 = 10.
         COLLECT    ITAB.
         ITAB-COL1 = ‘XYZ’.      ITAB-COL2 = 20.
         COLLECT    ITAB.
         ITAB-COL1 = ‘ABC’.      ITAB-COL2 = 80.
         COLLECT    ITAB.
此时, internal table中放的是2笔数据, 分别为:
         ITAB-COL1          ITAB-COL2
          ‘ABC’                 90
          ‘XYZ’                 20
四. INSERT LINE
将元素插入在指定的internal table位置之前.
格式: INSERT [<wa> INTO] [INITIAL LINE INTO ] <itab> [INDEX <idx>]
或者: INSERT LINES OF <itab1> [FROM <n1> TO <n2>] INTO <itab2> INDEX <idx>
其中: <wa>即work area,工作区中的元素.
[INITIAL LINE INTO] :插入一笔初始化的记录.
<itab>: internal table
[INDEX <idx>]: internal table 的记录号.(新加入的元素放在此记录前面)
五. 读取internal table
格式一:
LOOP AT <itab> [INTO <wa>][FROM <n1> TO <n2>][WHERE <conditions>]
         <statement>
ENDLOOP.
格式二:
READ TABLE <itab> [INTO <wa>] [INDEX <idx> / WITH KEY <conditions>]
举例. (格式二)
DATA: BEGIN OF ITAB OCCURS 10,
               COL1 TYPE I,
               COL2 TYPE I,
        END OF ITAB.
        DO 10 TIMES.
            ITAB-COL1 = SY-INDEX.
            ITAB-COL2 = SY-INDEX * 2.
            APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 3.
(或者: READ TABLE    ITAB WITH KEY COL1 = 3.)
WRITE: / ‘ITAB-COL1 = ‘, ITAB-COL1, ‘ITAB-COL2 = ‘, ITAB-COL2.
执行结果同样是:
ITAB-COL1 =        3
ITAB-COL2 =        6.
六. 修改internal table 中的值
格式: MODIFY <itab> [FROM <wa>][INDEX <idx>][TRANSPORTING <f1><f2>…][WHERE <conditions>]
举例一. READ TABLE ITAB INDEX 3.
         LINE-COL1 = 29.
         MODIFY ITAB FROM LINE TRANSPORTING COL1.
         将第三笔记录的COL1字段的值修改为29.
举例二. T_SALARY – salary = 50.
         MODIFY T_SALARY TRANSPORTING salary WHERE birthday = ‘1999/12/06’.
七. DELETE internal table中的字段
格式: DELETE <itab> INDEX <idx>.
或:     DELETE <itab>[FROM <n1> TO <n2>] [WHERE <conditions>]
八. Internal table 排序  
SORT <itab> [<order way>][BY <f1><f2>…]
其中:<order way> 有DESCENDING 和ASCENDING, Default 为ASCENDING.
       <f1>: 为指定排序的字段.
九. 加总
SUM.
总和计算存放与work area中,但只能在LOOP 中使用.
例: LOOP AT ITAB INTO LINE.
           SUM.
     ENDLOOP.
     WRITE: / LINE-COL1, LINE-COL2.
十. 初始化internal table
REFRESH <itab>.    清空<itab>中的值.
CLEAR     <itab>.    清空<itab>的Header Line.
FREE       <itab>.    释放记忆体空间.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115437-1-1.html 上篇帖子: SAP R/3 Often Used T-Code 下篇帖子: [转]SAP中找表的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表