美文网首页
ABAP-内表与工作区定义、获取数据

ABAP-内表与工作区定义、获取数据

作者: 矢量演说 | 来源:发表于2020-06-06 21:55 被阅读0次

关于获取数据

  • FOR ALL ENTRIES IN

ABAP "FOR ALL ENTRIES IN"用法

  • READ
READ TABLE itbl_xxx INTO wa_xxx WITH KEY '2'.
READ TABLE itbl_xxx INTO wa_xxx WITH KEY = 25.

前者是读取带关键字2的单行,后者是读取值为25的单行
READ只能读取单行,如果有多行则只匹配第一个条目(疑问)
写法例子:

READ TABLE itbl_xxx INTO wa_xxx WITH KEY COL3 = 9 COL4 = 36.
READ TABLE git_event INTO gwa_event
             WITH KEY name = slis_ev_top_of_page.

注意:尽量使用BINARY SEARCH,并在READ前排序。二分法查找前必须排序。、

若找到则返回sy-subrc = 0.可以通过判断sy-subrc = 0来进行后续操作

IF sy-subrc = 0.
    gwa_event-form = 'ALV_TOP_OF_PAGE'.
    MODIFY git_event INDEX sy-tabix FROM gwa_event.
  ENDIF.
  • MODIFY

以上面的READ中的MODIFY语句为例,

IF sy-subrc = 0.
    gwa_event-form = 'ALV_TOP_OF_PAGE'.
    MODIFY git_event INDEX sy-tabix FROM gwa_event.
  ENDIF.

注意:
MODIFY可以更新数据库或内表
当MODIFY用于更新内表时,有两种情况:
①在LOOP内:MODIFY作用于更新当前行
②在READ后:要加索引

  • WHERE skat~spras = sy-langu

sy-langu是登陆语言。
skat~spras = sy-langu是查询时按自己的登陆语言进行查询。
多用于取描述的时候添加的查询条件,因为描述字段可能会维护多个语种。
所以还得写在WHERE语句的第一条。

关于内表与工作区的定义

  • 内表后跟的中括号是什么?
// 判断内表是否不为空的一般写法是
IF itab[] IS NOT INITIAL.
ENDIF.
// 少了中括号就变成判断内表表头是否为空,如果该内表恰好没有表头,那么永远为空。

由此可见,内表加了中括号代表不含表头的表内容,不加只会判断表头是否为空。

  • OCCURS 0

ABAP编程中对内表的定义,后面接一个OCCURS (n)是代表什么意思。
例子:

DATA: BEGIN OF itab OCCURS 0,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
END OF itab.

SELECT *
FROM makt 
INTO CORRESPONDING FIELDS OF TABLE itab.

LOOP AT itab.
  WRITE:/
  itab-matnr,
  itab-maktx.
END LOOP.

由此可见,带OCCURS的结构不仅有wa原有的输出显示功能,还有it内表的存储功能,可以不用写DATA it_itab LIKE TABLE OF itab.了

  • WITH HEADER LINE

例子:

DATA itab1 TYPE TABLE OF char10.
DATA itab2 TYPE TABLE OF char10 WITH HEADER LINE.

Itab1是一个内表
Itab2既是一个内表,又是一个与该内表结构相同的工作区
因为容易混淆,尽量别用,推荐分开建内表和工作区。

  • SELECT XXX INTO CORRESPONDING FIELDS OF TABLE YYY

如果SELECT后面的字段比into table后面的字段多,程序运行的时候就会Dump掉,这时候你需要用SELECT XXX INTO CORRESPONDING FIELDS OF TABLE YYY。但是这时候你需要select后面的字段名要与table后面的内表中的字段名一一对应。如果用这个语法,字段名不对应的就没有值。
如果SELECT后的字段与into table的内表中的字段数量一样,且table中的字段类型与数据库表中的一样,用select XX into table YYY的时候不会Dump,但字段类型的顺序要一样。
例如:

DATA: BEGIN OF wa_a,
           bname TYPE xubname,
           spdb TYPE xuspdb,
           col TYPE xuspda,
           END OF wa_a,
           it_a LIKE TABLE OF wa_a.

SELECT bname
               spdb
               spda
   FROM usr
INTO TABLE it_a.

这样可以取到个字段的值

DATA: BEGIN OF wa_a,
           bname TYPE xubname,
           spdb TYPE xuspdb,
           col TYPE xuspda,
           END OF wa_a,
           it_a LIKE TABLE OF wa_a.

SELECT bname
               spdb
               spda
   FROM usr
INTO CORRESPONDING FIELDS OF TABLE it_a.

这样可以取到前两个字段的值

DATA: BEGIN OF wa_a,
           bname TYPE xubname,
           spdb TYPE xuspdb,
           END OF wa_a,
           it_a LIKE TABLE OF wa_a.

SELECT bname
               spdb
               spda
   FROM usr
INTO TABLE it_a.

这样程序就会Dump

相关文章

  • ABAP-内表与工作区定义、获取数据

    关于获取数据 FOR ALL ENTRIES IN ABAP "FOR ALL ENTRIES IN"用法 REA...

  • ABAP数据类型定义

    1、ABAP-基本数据类型 2、ABAP-变量声明 根据类型定义变量使用关键字 "DATA" 声明变量:DATA ...

  • iOS DB数据库

    一:创建DBManager .h 二:DBManager .m 三:添加表内数据 四:获取表内数据1.获取单个 2...

  • ABAP上传Excel中的数据到ALV输出内表

    选择屏幕上定义上传文件的输入框: 获取上传文件: 将获取的文件转换成内表数据: gt_excel具有如下结构: 处...

  • 结构、内表、工作区

    建一个结构: 建一个工作区: 根据结构创建用TYPE,根据工作区创建用LIKE 将数据传给工作区: 工作区只能存储...

  • thinkphp6 触发获取器

    ->toArray()方法只会触发定义的数据表中存在的字段的获取器如果获取器定义数据表中不存在的字段,返回列表时使...

  • ABAP基础知识:内表

    1.创建内表 可以利用下面两种方法定义内表: 1.参照局部表类型创建内表2.参照全局数据库表创建内表 1.1参照局...

  • 一个项目的流水线

    Step 1.构建数据库 数据库是一个项目的基石,定义一个统一的表以及表中的字节,可以减少数据存储、获取与修改过程...

  • SAP小技巧 动态内表的定义及使用

    点击蓝字 关注我们 一 前言 一般情况下,为了程序适用性更好,我们需要定义动态内表.来获取并呈现数据. 标准事务代...

  • 数组基本操作

    Array 定义空Array Array赋值 元素判断与获取 遍历Array for in 与 forEach的区...

网友评论

      本文标题:ABAP-内表与工作区定义、获取数据

      本文链接:https://www.haomeiwen.com/subject/xghozhtx.html