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具有相同结构的字段进行复制,同样适用于工作区

Abap 内表的语法的更多相关文章

  1. ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...

  2. ABAP语法篇2 内表操作语法

    VALUE MOVE-CORRESPONDING CORRESPOING FOR REDUCE GROUP BY FILTER VALUE语法: 结构赋值 ... VALUE dtype | #(  ...

  3. ABAP 内表 详解

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. ABAP 内表数据 与 Json串 相互转换

    内表: A B C IMINGZHA  HAIMINGZ AIMINGZH 1 2 3 4 5 6 Json串:  [{a: "IMINGZHA", b: "HAIMIN ...

  5. ABAP 内表访问表达式的性能

    内表访问表达式是ABAP 7.4中引入的重要特性,可以使语句变得更加简洁.美观.那么它的读写性能怎么样呢?我进行了一点点测试. 读取 测试代码,使用三种方式读取同一内表,分别是read table关键 ...

  6. ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]

    刚开始学ABAP的时候,学到iternal table时,感觉一阵混乱.搞不清楚什么是work area,什么是header line,以及occurs是干什么用的.今天终于差不多搞明白了(我还是太弱 ...

  7. Abap内表

    什么是内表:内表是内存中建立的一个临时表,你可以在程序运行时对表中的数据进行,插入,修改,删除等操作,程序跑完了,就会被释放. 定义类型:通过types开头定义 TYPES: BEGIN OF lin ...

  8. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)

    *********************************************************************** * Title           : ZSDF003  ...

  9. ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW

    *********************************************************************** * Title           : ZSDF002  ...

随机推荐

  1. 在try...catch语句中执行Response.End()后如何停止执行catch语句中的内容

    在调用Response.End()时,会执行Thread.CurrentThread.Abort()操作. 如果将Response.End()放在try...catch中,catch会捕捉Thread ...

  2. BZOJ_3172_[TJOI2013]_单词_(AC自动机)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3172 \(n\)个单词组成一篇文章,求每个单词在文章中出现的次数. 分析 这道题很像BZOJ_ ...

  3. 在windows10+word2010中完美使用北大方正word公式输入法总结

    如果在安装输入法时遇到了无法安装的情况,请首先百度下VC运行库安装下(32位64位都安就是),然后安装北大方正word公式输入法,此时不会再提示无法安装,接着(关键)在word应用程序图标右键-> ...

  4. 不要62(HDU 2089数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...

  5. HDU 3567 Eight II BFS预处理

    题意:就是八数码问题,给你开始的串和结束的串,问你从开始到结束的最短且最小的变换序列是什么 分析:我们可以预处理打表,这里的这个题可以和HDU1430魔板那个题采取一样的做法 预处理打表,因为八数码问 ...

  6. [King.yue]Ext.net 弹出Windows窗体注意的事项

    页面的控件ID不能重复,否则会覆盖原控件.

  7. 那些年一起踩过的坑 — java 自动装箱拆箱问题

    坑在哪里?   我们都知道Java的八种基本数据类型:int, short, long, double, byte, char, float, boolean   分别有各自对应的包装类型:Integ ...

  8. ASP.Net MVC_DotNetZip简单使用方法,解决文件压缩的问题[转]

    准备工作: 在vs工具栏中找到NuGet   下载DotNetZip   现在就可以使用DotNetZip强大的类库了,在这里我给出一些简单的使用. ? 1 2 3 4 5 6 7 8 9 10 11 ...

  9. IoSkipCurrentIrpStackLocation .(转)

    原文链接:http://m.blog.csdn.net/blog/ruanben/19758769# 当驱动被分层以后,他们被注册到一个chain中,IRP会在这个chain中传递,从最上面,到最下面 ...

  10. html中a标签中的onclick和href的使用

    1. 链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接): 假设链接中同时存在 href 与 onclick,如果想让 href 属性下 ...