1.用 ‘=’ 对比
可以使用FM:CTVB_COMPARE_TABLES来比较两个内表间的差异,有那些纪录是新增的,那些是修改过的和那些是被删除的。
直接使用 if itab1[] = itab2[].
endif.
判断两个内表内容是否相同,这种方法虽然简单但是也有一定的局限性,就是只有两个内表的内容完全一致 时,才认为相等。如果内表内容的排列顺序不一致,也认为两个内表不等,也就是说‘=’是一条一条比较的。
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
参数含义:
输入参数:
TABLE_OLD:旧表
TABLE_NEW:新表
KEY_LENGTH:键长度,指定内表中的前若干个字节为主键,做为内表行是否为增加的判断条件。
IF_SORTED:排序标记,如果已排序,在比较时可以提高效率。
输出参数:
TABLE_DEL:被删除的行
TABLE_ADD:被增加的行
TABLE_MOD:被修改的行
NO_CHANGES:表没有被修改的标记,如果这个标记为 “X”,表示TABLE_OLD和TABLE_NEW内容没有改变,如果为空则说明这两个内表内容不一致
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,表示两个内表内容相同,空-不相同