• Abap 内表的语法


    ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 

    不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的 
     内表支持循环对每行数据进行操作,也支持整体操作
     内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据 
    ABAP中有三种内表类型:标准表,哈希表,排序表

    - ABAP内表数据类型
     内表数据对象是实际的内表,可以用数据进行填充 
     内表数据类型是用于定义内表数据对象的抽象数据类型(ADT) 
     

    可以使用的内表数据类型有: 
     Structure 
     数据库表

     用户自定义数据类型

    -ABAP内表声明

    1>

    TYPES: BEGIN OF line, 

           field1 TYPE i, 

           field2 TYPE i, 

           END OF line. 

    * 声明一个数据类型

    DATA: ITAB_WA TYPE(LIKE) line.    “ 声明一个内表工作区

    DATA: ITAB TYPE(LIKE) line OCCURS 0.  “ 声明一个无工作区的内表 

    DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0.   “ 声明一个有工作区的内表

    DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE. 

    DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE. 

    2>

    DATA:  BEGIN OF line, 

           field1 TYPE i, 

           field2 TYPE i, 

           END OF line. 

    * 声明一个line对象,该对象可以作为工作区使用

    * 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区

    DATA: ITAB_WA TYPE(LIKE) line.   “ 声明一个工作区

    DATA: ITAB TYPE(LIKE) line OCCURS 0 WITH HEADER LINE.  “ 声明一个带工作区的内表

    DATA: ITAB TYPE(LIKE) STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE . “ 声明一个带工作区的内表 

    3> 直接定义内表,这个内表是有工作区的

    DATA: BEGIN OF ITAB OCCURS 0 , 

          CARR1 LIKE SPFLI-CARRID, 

          CONN1 LIKE SPFLI-CONNID, 

          END OF ITAB. 

    * DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。 

    正确方法:ITAB1 TYPE ITAB OCCURS 0.(这样定义后的是一个无工作区的内表)。 

    DATA: ITAB1 LIKE ITAB OCCURS 0 WITH HEADER LINE.  “定义一个带工作区内表

    4> type ref to 定义内表

    type ref to 属于ABAP中面向对象的编程。它是定义一个类的对象。

     

    5>通过数据库表定义

    data itab1 type table of sflight . “ 定义一个不带内表的工作区

    data wa1 like line of sflgit  .    “ 定义一个内表工作区

    data itab1 type table of sflight with header line . “定义一个带内表的工作区

    两种内表定义方式的主要区别在于是否有隐式表头行

    内表是按行进行访问的,然而,程序对内表的行操作不能直接进行,必须使用一种接口来传输,这个接口就是工作区(Work Area)
     

    --内表操作

    填充内表行 
    append <wa> to <itab>   “ 不带表头行的填充 
    append <itab>                “ 带隐式表头行的填充 

    插入内表行 
    insert <wa> into <itab> [INDEX idx]    “ 
    insert <itab> [INDEX idx ]                   “ 隐式表头行插入内表 
    -- 如果没有指定INDEX ,则默认插入到内表最后一行 

    读取内表行 
    read <itab> into <wa> [INDEX idx]  
    read <itab> [INDEX IDX]  

    修改内表行 
    modify <itab> from <wa> [INDEX idx] 
    modify <itab> [INDEX idx] 
    -- read itab index 3 . 
    -- itab-XX = ‘xxx’ . 
    -- modify itab index 4 . 

    删除内表行 
    delete <itab> [INDEX idx] . 
    -- 带表头行和不带表头行语法一致 。 

    内表循环 
    Loop at <itab> into <wa> . 
       <statement block> 
    endloop.                                     “ 带表头行的内表循环操作 

    Loop at <itab> . 
      <statement block> 
    endloop.                                     “ 不带表头行内表操作 

    -- 循环体的MODIFY,DELETE等语句不必指定INDEX项,系统默认处理当前行 . 
    -- 如果不需要读取所有的内表行,可以使用WHERE选项进行限制 
    -- LOOP AT <itab> [WHERE <conditions>] 

    清空内表 
    clear <itab> . “清空不带表头行内表 

    clear<itab>[] . “清空带表头行内表 

    内表排序 
    SORT <itab> [ASCENDING | DESCENDING] [AS TEXT] 
    --ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序 
    --AS TEXT影响字符字段的排序方式,如果不使用该选项,系统将按字符平台相应内部编码进行排序,否则,系统根据当前语言按字母顺序排序字符字段 

    删除重复行 
    DELETE ADJACENT DUPLICATES FROM <itab> [COMPARING <comp>]. 
    -- 删除重复行之前须对内表进行排序 

    判断内表行数 
    DESCRIBE TALBE <itab> LINES <count>. 

    将内表中部分或全部的数据行整体插入另一内表 
    INSERT LINES OF <itab1> [FROM n1] [TO n2] INTO [TABLE] <itab2> [INDEX <idx>]. 
    -- insert lines of itab1 from 1 to 100 into itab2 . “ 将内表1前100行数据附加到内表2 . 
    -- 两个内表必须具有相同的或可转换的行结构 

    将内表中部分或全部的数据行整体填充到另一内表 
    APPEND LINES OF <itab1> [FROM n1] [TO n2] TO <itab2>. 

    按照条件或者索引删除一组选定行 
    DELETE <itab> [FROM n1] [TO n2] [WHERE <condition>]. 
    -- delete itab1 from 1 to 100 where age >30 . "删除内表前100行中年龄大于30 的记录 。 

    整体复制内表,目标内表原有内容被覆盖 
    MOVE <itab1> TO <itab2>                            不带表头行的内表之间进行复制 
    MOVE <itab1>[] TO <itab2>[].                      带表头行的内表之间进行复制 
    MOVE <itab1> TO <itab2>[].                        不带表头行的内表复制到带表头行的内表 
    MOVE-CORRESPONDING <itab1> TO <itab2> 复制内表1中与内表2具有相同结构的字段进行复制,同样适用于工作区

  • 相关阅读:
    Nginx流量拷贝
    Nginx基于站点目录和文件的URL访问控制
    Nginx禁止ip访问或非法域名访问
    Nginx动静分离
    Nginx隐藏式跳转(浏览器URL跳转后保持不变)
    Harbor镜像仓库(含clair镜像扫描)
    Pod的QoS服务质量等级
    Pod容器应用"优雅发布"
    Pod容器自动伸缩(HPA) 测试
    NFS双机热备高可用环境
  • 原文地址:https://www.cnblogs.com/xinzjing/p/4684965.html
Copyright © 2020-2023  润新知