二维码

[基础语法] ABAP内表语法Secondary Keys的用法

Twilight发表于 2016-11-07 10:09zlzt 最后回复于 2019-11-28 14:40 [复制链接] 3554 2

在ABAP release 7.0 EhP 2版本后,新增的语法,详细语法请F1,或者Secondary Keys at SAP Help

先分析一段代码:
  1. TYPES:ty_vbap TYPE TABLE OF vbap WITH NON-UNIQUE SORTED KEY matnr_werks COMPONENTS matnr werks.

  2. DATA:t_vbap TYPE ty_vbap.
  3. DATA:ls_vbap TYPE LINE OF ty_vbap.

  4. SELECT *
  5.   UP TO 100 ROWS
  6.   INTO TABLE t_vbap
  7.   FROM vbap.

  8. READ TABLE  t_vbap INTO ls_vbap WITH KEY matnr_werks COMPONENTS matnr = '' werks = ''.
  9. IF sy-subrc = 0.
  10. ELSE.
  11. ENDIF.
复制代码

DEBUG视图:
it secondary keys.jpg
内表T_VBAP有两个键值PRIMARY_KEY和MATNR_WERKS,相当于数据库表中的索引,其中PRIMARY_KEY是所有内表默认的Primary key,MATNR_WERKS就是我们刚才定义内表的Secondary Keys;当执行READ语句时,Secondary Keys数据才会被刷新。

对比两种访问内表的语法区别
1、Standard Access  Access Via Secondary Key
  1. * normal access
  2. *
  3. READ TABLE t_vbap INTO ls_vbap WITH KEY vbeln = ' ' posnr = ' '.

  4. LOOP AT t_vbap INTO ls_vbap WHERE vbeln = ' ' AND   posnr = ' '.
  5. ENDLOOP.

  6. INSERT LINES OF t_vbap INTO itab INDEX 1.

  7. APPEND LINES OF t_vbap FROM 1 TO 10 TO itab.

  8. MODIFY t_vbap FROM ls_vbap TRANSPORTING arktx WHERE vbeln = ' '.

  9. DELETE t_vbap WHERE vbeln = ' '.
复制代码

2、Access Via Secondary Key
  1. * Using Secondary Key
  2. *
  3. READ TABLE t_vbap INTO ls_vbap WITH KEY matnr_werks COMPONENTS matnr = ' ' werks = ' '.

  4. LOOP AT t_vbap INTO ls_vbap USING KEY matnr_werks WHERE matnr = ' ' AND   werks = ' '.
  5. ENDLOOP.

  6. INSERT LINES OF t_vbap USING KEY matnr_werks INTO itab INDEX 1.

  7. APPEND LINES OF t_vbap FROM 1 TO 10 USING KEY matnr_werks TO itab.

  8. MODIFY t_vbap FROM ls_vbap USING KEY matnr_werks TRANSPORTING arktx WHERE matnr = ' ' AND   werks = ' '.

  9. DELETE t_vbap USING KEY matnr_werks WHERE matnr = ' ' AND   werks = ' '.
复制代码

使用注意点:
1、Secondary Keys一般在数据量特别大的内表中才会被使用,Secondary Keys中数据的刷新是需要内表administration进行实时跟踪管理的,会花费一些资源;
2、其次它不适合内表数据经常更改的情况。
除了能声明成排序表,还能声明成哈希表
  1. TYPES:ty_vbap TYPE TABLE OF vbap
  2.               WITH UNIQUE SORTED KEY sort_key COMPONENTS matnr werks
  3.               WITH NON-UNIQUE SORTED KEY non_sort_key COMPONENTS matnr werks
  4.               WITH UNIQUE HASHED KEY hash_key COMPONENTS matnr werks.
复制代码

NON-UNIQUE 内表中可以有重复数据
UNIQUE 内表中不能有重复数据,否则程序dump
回复

使用道具 举报

mas涓细流
谢谢分享,学习中
回复

使用道具 举报

zlzt
感谢分享
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

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