ABAP内表常用操作

转载 2016年05月31日 14:31:15

原文地址:http://www.cnblogs.com/hanmos/archive/2013/02/01/2888364.html

概述

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 OFline INITIAL SIZE 0.   “ 声明一个有工作区的内表

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

DATA: ITAB TYPE(LIKE) STANDARD TABLE OFline 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 WITHHEADER LINE.  “ 声明一个带工作区的内表

 DATA: ITAB TYPE(LIKE) STANDARD TABLE OFline 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 HEADERLINE.  “定义一个带工作区内表

 

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 withheader line . “定义一个带内表的工作区

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

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

 

 

内表操作

 

填充内表行

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

append <itab>                “ 带隐式表头行的填充

 

插入内表行

insert <wa> into <itab> [INDEXidx]    “

insert <itab> [INDEX idx ]                   “ 隐式表头行插入内表

-- 如果没有指定INDEX ,则默认插入到内表最后一行

 

读取内表行

read <itab> into <wa> [INDEXidx] 

read <itab> [INDEX IDX] 

 

修改内表行

modify <itab> from <wa> [INDEXidx]

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] [TOn2] INTO [TABLE] <itab2> [INDEX <idx>].

-- insert lines of itab1 from 1 to 100 intoitab2 . “将内表1前100行数据附加到内表2 .

-- 两个内表必须具有相同的或可转换的行结构

 

将内表中部分或全部的数据行整体填充到另一内表

APPEND LINES OF <itab1> [FROM n1] [TOn2] 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常用字符串操作收集整理

  • 2013年09月09日 15:03
  • 23KB
  • 下载

ABAP常用字符串操作

  • 2010年03月24日 09:26
  • 96KB
  • 下载

ABAP常用字符串操作

字符串首字符索引为 0; Character Fields: C,N, D, T, string(CNDT=> CN Data Time)  1. 字符串连接 CONCATENATE...

ABAP-常用字符串操作收集整理

文章转自 http://wfly2004.blog.163.com/blog/static/117642720106792156118/ 字符串首字符索引为 0; Character Field...

ABAP report常用的一些语句用法(包括字符串操作,变量动态操作)(持续更新)

1、计算内表的长度:       DESCRIBE TABLE   IT_BKPF   LINES   LEN.       后面除了可以接LINES显示条数,还可以接KIND,显示内表的属性,还有...

ABAP常用表描述

模块 表名 中文描述   CO CEPC 利润中心主数据表 CO模块CEPC_利润中心主数据表 CO COBK 成本控制对象:凭证标题 CO模块COBK_成本控制...

ABAP常用的表,参数介绍

FI常用表 GL部分: FAGLFLEXT(FMGLFLEXT)   新总账汇总表 GLT0        旧总帐汇总表           SKA1        总账科目主记录 (科目...

ABAP开发之FI常用表

GL部分: FAGLFLEXT   新总账汇总表 GLT0            旧总帐汇总表           SKA1            总账科目主记录 (科目表)          ...

abap开发常用表

-1 两个内表相拷可用表达式: ITABA[] = ITABB[]. 2. 为了提高程序的运行速度: Uesing ABAP sort clause instead of order by. 把一个...

abap内表的操作_例子

*&---------------------------------------------------------------------* *& Report Z_LZ_002 *& *&--...
  • lz00728
  • lz00728
  • 2011年11月07日 13:41
  • 1138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ABAP内表常用操作
举报原因:
原因补充:

(最多只允许输入30个字)