公众号:SAP Technical
本文作者:matinal
 

前言部分

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

正文部分

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”,就不必去读前面三个内表了。

【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同的更多相关文章

  1. 【ABAP系列】ABAP CL_ABAP_CONV_IN_CE

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

  2. 【ABAP系列】SAP ABAP模块-取整操作中CEIL和FLOOR用法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP模块-取整操作中 ...

  3. 【ABAP系列】SAP 使用特殊的技术更新数据库(ABAP)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 使用特殊的技术更新数据库 ...

  4. 【ABAP系列】SAP ABAP 资产类BAPI过账 BAPI_ACC_DOCUMENT_POST

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

  5. 【ABAP系列】SAP ABAP DYNP_VALUES_UPDATE 更新屏幕字段的函数及用法

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

  6. 【ABAP系列】SAP ABAP MRKO增强

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

  7. 【ABAP系列】SAP ABAP 实现FTP的文件上传与下载

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

  8. 【ABAP系列】SAP 生产订单完工确认(CO11N) BAPI : BAPI_PRODORDCONF_CREATE_TT

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 生产订单完工确认(CO1 ...

  9. 【ABAP系列】SAP 获取工单和工序的状态

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 获取工单和工序的状态   ...

随机推荐

  1. jmeter做websocket协议的接口测试

    1.首先介绍一下我们要测试的接口的业务流程: (1)http协议登录,登录成功获取一个clientsessionid,时效30Min (2)用这个clientsessionid+登陆的用户名建立连接s ...

  2. 洛谷P1412 经营与开发题解

    题目链接QWQ这里就不阐述了: 题解部分: 从题面上来看,这是个dp(递推)的题目. 但是dp要满足无后效性,但这个题为了取最值,得考虑从当前开始一直持续到结束的p的影响. 这让我们怎么满足无后效性? ...

  3. CentOS7安装并使用Ceph

    1.准备工作1.1 安装配置NTP官方建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障. ln -sf /usr/share/zonei ...

  4. webpack 热更新

    1.安装webpack npm install webpack -g  //全局安装 npm install webpack --save-dev  //开发环境 2.使用webpack 创建一个we ...

  5. 如何导出不带.svn的文件夹

    在工作环境中,有的时候需要将本地SVN服务器中的文件导出来,提交到另一个SVN服务器中去(比如做现场开发时,由于外网速度慢,项目组内部往往使用一个SVN服务器,但又同时又需要公司统一管理,定期提交到公 ...

  6. 1222/2516. Kup

    题目描述 Description 首先你们得承认今天的题目很短很简洁... 然后,你们还得承认接下来这个题目的描述更加简洁!!! Task:给出一个N*N(1≤N≤2000)的矩阵,还给出一个整数K. ...

  7. python中的时间模块

    废话不多说,看代码 import datetime,time import calendar #时间戳 t1 = time.time() print('当前时间戳是{}'.format(t1)) #格 ...

  8. js判断条件为“假”的情况

    以下6种情况判断结果为"假": 1.false(布尔类型) 2.null(用于定义空的或者不存在的引用) 3.undefined(未定义) 4.0(数值0) 5.''(空字符串) ...

  9. linux-网络管理-6

    Hub 集线器 物理层设备 多端口中继器,不记忆MAC地址 以太网桥 OSI第二层数据链路层 扩展了网络带宽 分割了网络冲突域,使网络冲突被限制在最小的范围内 交换机作为更加智能的交换设备,能够提供更 ...

  10. Linux系统下lz4解压缩命令小结

    lz4是一个让"人见人爱.花见花开"的压缩算法,能够在多核上很好的扩展.lz4在压缩率上略微逊色, 但是在解压速度上有着惊人的优势 (大概是gzip的3倍(多次测试对比)).因为压 ...