本文主要介绍一下SAP ABAP中内表的增删查改语句中的删除内表数据的相关语句,包括利用关键字删除数据,利用索引删除数据,利用WHERE语句删除数据,删除重复语句行
利用关键字删除数据
DELETE TABLE itab. DELETE TABLE itab FROM wa. DELETE TABLE itab WITH TABLE KEY k1 = f1 k2 = f2 ... kn = fn.
案例代码演示(使用工作区)
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID, GS_SFLIGHT TYPE SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200716'. GS_SFLIGHT-PRICE = 1500. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200717'. GS_SFLIGHT-PRICE = 1600. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'BC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200718'. GS_SFLIGHT-PRICE = 1700. APPEND GS_SFLIGHT TO GT_SFLIGHT. WRITE:'内表数据删除前:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP. GS_SFLIGHT-CARRID = 'BC'. DELETE TABLE GT_SFLIGHT FROM GS_SFLIGHT. ULINE. WRITE:'内表数据删除后:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP.
效果演示(使用工作区)
案例代码演示(使用TABLE KEY)
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID FLDATE, GS_SFLIGHT TYPE SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200716'. GS_SFLIGHT-PRICE = 1500. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200717'. GS_SFLIGHT-PRICE = 1600. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'BC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200718'. GS_SFLIGHT-PRICE = 1700. APPEND GS_SFLIGHT TO GT_SFLIGHT. WRITE:'内表数据删除前:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP. DELETE TABLE GT_SFLIGHT WITH TABLE KEY CARRID = 'AC' FLDATE = '20200716'. ULINE. WRITE:'内表数据删除后:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP.
效果演示(使用TABLE KEY)
利用索引删除数据
DELETE itab INDEX n. DELETE itab FROM n1 TO n2. DELETE itab FROM n1. "删除n1后面的数据(包括n1) DELETE itab TO n2. "删除n2前面的数据(包括n2)
案例代码演示
PS:依次接触下面案例中的DELETE语句的注释代码,观察它们不同的效果
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID FLDATE, GS_SFLIGHT TYPE SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200716'. GS_SFLIGHT-PRICE = 1500. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200717'. GS_SFLIGHT-PRICE = 1600. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'BC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200718'. GS_SFLIGHT-PRICE = 1700. APPEND GS_SFLIGHT TO GT_SFLIGHT. WRITE:'内表数据删除前:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP. DELETE GT_SFLIGHT INDEX 3. *DELETE GT_SFLIGHT FROM 2 TO 3. *DELETE GT_SFLIGHT FROM 2. *DELETE GT_SFLIGHT TO 2. ULINE. WRITE:'内表数据删除后:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP.
效果演示
利用WHERE语句删除数据
DELETE itab WHERE condition.
案例代码演示
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID FLDATE, GS_SFLIGHT TYPE SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200716'. GS_SFLIGHT-PRICE = 1500. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200717'. GS_SFLIGHT-PRICE = 1600. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'BC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200718'. GS_SFLIGHT-PRICE = 1700. APPEND GS_SFLIGHT TO GT_SFLIGHT. WRITE:'内表数据删除前:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP. DELETE GT_SFLIGHT WHERE CARRID = 'AC'. ULINE. WRITE:'内表数据删除后:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP.
效果演示
利用ADJACENT DUPLICATE语句删除重复数据
DELETE ADJACENT DUPLICATE FROM itab [COMPARING f1 f2...|ALL FIELDS].
PS:
1)若不指定字段,则系统自动以内表的关键字为基准删除重复数据;若内表没有设置关键字,则自动定义以CHAR类型的字段为关键字
2)使用ADJACENT DUPLICATE语句之前需要对内表进行排序才能达到预期效果
案例代码演示
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID, GS_SFLIGHT TYPE SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200716'. GS_SFLIGHT-PRICE = 1500. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'AC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200717'. GS_SFLIGHT-PRICE = 1700. APPEND GS_SFLIGHT TO GT_SFLIGHT. GS_SFLIGHT-CARRID = 'BC'. GS_SFLIGHT-CONNID = 0820. GS_SFLIGHT-FLDATE = '20200718'. GS_SFLIGHT-PRICE = 1700. APPEND GS_SFLIGHT TO GT_SFLIGHT. WRITE:'内表数据删除前:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP. DELETE ADJACENT DUPLICATES FROM GT_SFLIGHT. ULINE. WRITE:'内表数据删除后:'. LOOP AT GT_SFLIGHT INTO GS_SFLIGHT. WRITE:/ GS_SFLIGHT-CARRID,GS_SFLIGHT-CONNID,GS_SFLIGHT-FLDATE,GS_SFLIGHT-PRICE. ENDLOOP.
效果演示