1, 用‘=’对比
直接使用 if itab1[] = itab2[]. endif.判断两个内表内容是否相同,这种方法虽然简单但是也有一定的局限性,就是只有两个内表的内容完全一致 时,才认为相等。如果内表内容的排列顺序不一致,也认为两个内表不等,也就是说‘=’是一条一条比较的。
测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
REPORT ztest_compare_it. DATA:git_ekpo1 TYPE STANDARD TABLE OF ekpo, git_ekpo2 TYPE STANDARD TABLE OF ekpo. SELECT * FROM ekpo INTO TABLE git_ekpo1 UP TO 10 ROWS. git_ekpo2[] = git_ekpo1[]. IF git_ekpo1[] = git_ekpo2[]. WRITE: '1st,same'. ELSE. WRITE: '1st,difference'. ENDIF. * 将git_ekpo2排序,排序后与git_ekpo1中内容的顺序就不同了 SORT git_ekpo2 BY ebeln DESCENDING. IF git_ekpo1[] = git_ekpo2[]. WRITE:/ '2nd,same'. ELSE. WRITE:/ '2nd,difference'. ENDIF. |
运行结果:
2, 使用CTVB_COMPARE_TABLES
也可以调用CTVB_COMPARE_TABLES来比较内表,
参数含义:
输入参数:
TABLE_OLD:旧表
TABLE_NEW:新表
KEY_LENGTH:键长度,指定内表中的前若干个字节为主键,做为内表行是否为增加的判断条件。
IF_SORTED:排序标记,如果已排序,在比较时可以提高效率。
输出参数:
TABLE_DEL:被删除的行
TABLE_ADD:被增加的行
TABLE_MOD:被修改的行
NO_CHANGES:表没有被修改的标记,如果这个标记为 “X”,表示TABLE_OLD和TABLE_NEW内容没有改变,如果为空则说明这两个内表内容不一致
例子代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
REPORT ztest_compare_it. DATA:git_ekpo1 TYPE STANDARD TABLE OF ekpo, git_ekpo2 TYPE STANDARD TABLE OF ekpo, git_del TYPE STANDARD TABLE OF ekpo, git_mod TYPE STANDARD TABLE OF ekpo, git_add TYPE STANDARD TABLE OF ekpo, l_no_changes TYPE c. SELECT * FROM ekpo INTO TABLE git_ekpo1 UP TO 10 ROWS. git_ekpo2[] = git_ekpo1[]. * 将git_ekpo2排序,排序后与git_ekpo1中内容的顺序就不同了 SORT git_ekpo2 BY ebeln DESCENDING. CALL FUNCTION 'CTVB_COMPARE_TABLES' EXPORTING table_old = git_ekpo2 table_new = git_ekpo1 key_length = 100 "键长度,指定内表中的前若干个字节为主键,做为内表行是否为增加的判断条件。 IMPORTING table_del = git_del "new比old 少的数据 table_add = git_add "new比old 多的数据 table_mod = git_mod "new中修改的数据 no_changes = l_no_changes."X,表示两个内表内容相同,空-不相同 * 尽管两个内表数据顺序不同,还是认为两个内表内容是相同的,l_no_changes = 'X' WRITE:/ '1st,', l_no_changes. APPEND LINES OF git_ekpo1[] TO git_ekpo2[]. CALL FUNCTION 'CTVB_COMPARE_TABLES' EXPORTING table_old = git_ekpo2 table_new = git_ekpo1 key_length = 100 "内表比较的key键 IMPORTING table_del = git_del "new比old 少的数据 table_add = git_add "new比old 多的数据 table_mod = git_mod "new中修改的数据 no_changes = l_no_changes."X,表示两个内表内容相同,空-不相同 WRITE:/ '2nd,', l_no_changes. |
显示结果:
以上。
发表评论