FOR ALL ENTRIES

1、使用该选项后,对于最后得出的结果集系统会自动删除重复行。因此如果你要保留重复行记录时,记得在SELECT语句中添加足够字段

2、FOR ALL ENTRIES IN后面使用的内部表itab如果为空,将查出当前CLIENT所有数据(即忽略整个WHERE语句,其他条件都会被忽略)

3、内表中的条件字段不能使用BETWEENLIKEIN比较操作符

4、使用该语句时,ORDER BY语句和HAVING语句不能使用

5、使用该语句时,COUNT( * )(并且如果有了COUNT函数,则不能再选择其他字段,只能使用在Select ... ENDSelect语句中了)以外的所有合计函数(MAX,MIN,AVG,SUM)都不能使用

即使Where后面还有其它条件,所有的条件都会忽略

SELECT vbeln posnr pstyv werks matnr arktx lgort waerk kwmeng
FROM vbap INTO TABLE gt_so FOR ALL ENTRIES IN lt_matnr
WHERE matnr lt_matnr-matnr AND vbeln IN s_vbeln AND posnr IN s_posnr.

如果上面的lt_matnr为空,则“AND  vbeln IN s_vbeln AND posnr IN s_posnr”条件也会忽略掉,即整个Where都会被忽略掉。

 

SELECT  matnr FROM mara INTO CORRESPONDING FIELDS OF TABLE strc
FOR ALL ENTRIES IN strc WHERE matnr strc-matnr .

生成的SQL语句:SELECT "MATNR" FROM "MARA" WHERE "MANDT" = '210' AND "MATNR" IN ( '000000000000000101' , '000000000000000103' , '000000000000000104' )

:这里看上去FOR ALL ENTRIES使用 IN 表达式来代替了,这是只有使用到内表中一个条件是这样的,如果使用多个条件时,不会使用In表达式,而是使用OR连接,像这样:

image.png

image.png

另外,在使用FOR ALL ENTRIES时,不管使用了条件内表中的一个还是多个条件字段,都会以5值为单位进行SQL发送

关键词: ABAP

网友评论

发表评论