公众号:SAP Technical
本文作者:matinal
原文出处:http://www.cnblogs.com/SAPmatinal/
原文链接:【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分

SAP自带的函数:
CTVB_COMPARE_TABLES和BKK_COMPARE_TABLES;
似乎可以比较两个内表,得出第二个内表不同于第一个内表的部分(新增/删除了那些部分)

但是,具体的使用,还请有经验的朋友不吝赐教啊!
因为,我在测试数据时,发现这两个函数的效果不那么简单。
如果上述函数确实可以,提取两个内表不同部分,则我可以据此做两次比较,得到两个内表的交集。
所以,我先用另外一种方式解决了-自己写了一个提取两个内表交集的函数,供大家检阅:

*"  IMPORTING
*"     VALUE(ITAB1) TYPE  INDEX TABLE
*"     VALUE(ITAB2) TYPE  INDEX TABLE
*"  EXPORTING
*"     VALUE(ITABSAME) TYPE  INDEX TABLE
*"----------------------------------------------------------------------

field-symbols:
    <S1>,
    <S2>.
  data:
    L1 type i,
    L2  type i.

assign local copy of initial line of:
         ITAB1 to <S1>,
         ITAB2 to <S2>.
  describe: table ITAB1 lines L1,
            table ITAB2 lines L2.

"对记录行数少的内表,执行第一层循环;
"在第二层循环中,找到对应记录,即可追加到结果内表;
"同时退出第二层循环,继续执行第一层循环的下一行
IF L1 <= L2.
  LOOP AT ITAB1 INTO <S1>.
    LOOP AT ITAB2 INTO <S2>.
      IF <S1> EQ <S2>.
        APPEND <S1> TO ITABSAME.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ELSE.
  LOOP AT ITAB2 INTO <S2>.
    LOOP AT ITAB1 INTO <S1>.
      IF <S1> EQ <S2>.
        APPEND <S2> TO ITABSAME.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDIF.
ENDFUNCTION.

另一个问题,想请教大家,在上面代码里,第二层循环是为了找出,第一层循环的当前记录,在第二个内表里是否存在;

所以,如果ABAP自带了,判断一个内表中,是否存在某个记录的函数的话,那第二层循环就可以省去,则上述函数执行效率也会成倍提升了。

以下转自华亭博客:感谢华亭的分享:

函数模块:CTVB_COMPARE_TABLES
这个函数模块比较两个内表,将被删除、增加和修改的内表行分别分组输出。

输入参数:
TABLE_OLD:旧表
TABLE_NEW:新表
KEY_LENGTH:键长度,指定内表中的前若干个字节(在 Unicode 系统中为字符,因此指定长度内不能存在数值类型的字段)为主键,做为内表行是否为增加的判断条件。
IF_SORTED:排序标记,如果已排序,在比较时可以提高效率。

输出参数:
TABLE_DEL:被删除的行
TABLE_ADD:被增加的行
TABLE_MOD:被修改的行
NO_CHANGES:表没有被修改的标记,如果这个标记为 “X”,就不必去读前面三个内表了。

转载于:https://www.cnblogs.com/SAPmatinal/p/11176482.html

【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同相关推荐

  1. 【SAP Abap】SAP ABAP 三元运算的实现与使用注意事项

    SAP ABAP 三元运算的实现与使用注意事项 ABAP的三元运算 使用注意事项 演示 ABAP的三元运算 三元运算符是软件编程中的一个固定格式,语法是"条件表达式?表达式1:表达式2&qu ...

  2. SAP ABAP Development Tool 提高开发效率的十个小技巧

    这是 Jerry 2021 年的第 46 篇文章,也是汪子熙公众号总共第 323 篇原创文章. Jerry 已经有很长一阵子没有打开工作电脑上的 SAP ABAP Development Tool 了 ...

  3. SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析

    ABAP里的IS BOUND, IS NOT INITIAL和IS ASSIGNED这组关键字,如果平时不留心,很容易理解地似是而非.今天我们就来说一说它们的区别. 先把SAP帮助文档抄过来: IS ...

  4. 什么是 SAP ABAP? 类型、ABAP 完整形式和含义

    转载地址:https://www.guru99.com/what-is-abap.html ABAP 是一种由 SAP 创建的高级编程语言,可帮助大型企业定制 SAP ERP. ABAP 可以帮助定制 ...

  5. 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码

    本系列之前的文章: 与其整天担心 AI 会取代程序员,不如先让 AI 帮助自己变得更强大 每日一个 ChatGPT 使用小技巧系列之1 - 给出提纲或者素材,让 ChatGPT 帮你写作 正好昨天有朋 ...

  6. 【ABAP系列】SAP ABAP中关于commit的一点解释

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP中关于commi ...

  7. 【ABAP系列】SAP ABAP SY-SUBRC的含义解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP SY-SUBR ...

  8. 【ABAP系列】SAP 读取生产订单 记入文档的货物移动明细

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 读取生产订单 记入文档的 ...

  9. SAP abap内表分类与增删改查操作

    SAP abap内表分类与增删改查操作 1.内表的分类 1.1.标准表 (standard table ) 系统为该表每一行生成一个院级索引.填表是可以将数据附加在现有行之后,也可以插入到指定的位置, ...

最新文章

  1. Windows Performance Toolkit
  2. winform控件大小改变是防止背景重绘导致的闪烁
  3. 第四天:规划范围管理
  4. php 不等于 的函数吗,PHP不常见的函数整理
  5. 动手造轮子:写一个日志框架
  6. mysql sysbench_详解MySQL基准测试和sysbench工具
  7. linux分区方案 arv,Linux运维 第三阶段 (九)NFS
  8. 【codevs1116】四色问题
  9. 屋子里有1到100号100盏关闭的灯
  10. asp.net oracle odbc,ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)
  11. Matlab-杆单元整体刚度矩阵组装(有限元基础-曾攀)
  12. php将word转化成html,phpword转html
  13. 数字电路实验 03 - | 数据选择器及其应用
  14. 连点脚本java,按键精灵键盘连点脚本日常
  15. 基于STM32F429,Cubemx的SAI音频播放实验
  16. STM32F103C8核心板原理图
  17. matlab获得模型切面,基于MATLAB的STL模型切片分层算法
  18. ios wifi 定位_iOS最新跳转手机设置WIFI定位等界面方法适配iOS11
  19. 各大银行ATM跨行取款收费一览表
  20. ListView分页下载

热门文章

  1. 华为手机卡在升级界面_你的华为手机变卡了,1分钟调整这3个功能,让手机再战3年...
  2. 【Linux系列】mac终端与服务器连接
  3. 虚拟化技术--桌面虚拟化(VDI)
  4. 程序员需培养企业家式的能力
  5. 重构《一》-- 提取方法
  6. java 转为Calendar_在Java中将String转换为Calendar对象
  7. ios用的什么编译器编译_您最喜欢什么编译器?
  8. wtf是转换ttf_WTF入门,它是终端的仪表板
  9. linux bash技巧_Bash提示技巧和窍门
  10. github开源项目_GitHub项目分析,3D打印义肢和更多开源新闻