zoukankan      html  css  js  c++  java
  • 【转】Abap For all entries in 使用

    1.For all entries in什么时候使用?

    2.注意事项

    1.对于不能join的表,使用for all entries in语句将数据库表与内表串联。
    
    for all entries in类似外连接的时候,为避免多次重复数据库查询,用内表的某一字段为条件,从数据库表中取得数据,有一样则选出,相当于过滤数据的作用。
    2.① 检查内表是否为空,如果为空,将取得全部数据
    ② 不能使用LIKE ,BETWEEN 和IN(因为这些比较操作符都是不确定比较操作符(将选择条件设定在一个范围内),
    而FOR ALL ENTRIES IN语句的作用相当于将选择条件块全部并列开来,
    用OR连接,如果每个OR分支中又是不确定的范围,那么系统性能将大大降低,
    因此R/3系统在使用该语句时禁止使用不确定比较操作符。)
    ③要尽可能多的用关键字,否则会把重复的数据删掉

    使用实例:

    复制代码
     1 IF gt_knvv[] IS NOT INITIAL.
     2 SELECT kunnr vkorg vtweg spart kunn2
     3 FROM knvp
     4 INTO CORRESPONDING FIELDS OF TABLE gt_knvp
     5 FOR ALL ENTRIES IN gt_knvv
     6 WHERE kunnr = gt_knvv-kunnr
     7 AND vkorg = gt_knvv-vkorg
     8 AND vtweg = gt_knvv-vtweg
     9 AND spart = gt_knvv-spart
    10 AND parvw = 'WE'.
    11 END IF.
    复制代码

    注意事项:

    1.使用该语句,对于最后得出的结果集系统会自动删除重复行。

    因此如果你要保留重复行记录时,记得在SELECT语句中添加足够键值项目(有必要时,增加全部键值项目),

    以保证结果集中所需重复项目不会被删除。(例如选取支付金额时,支付事件可能不同,但金额可能相同,此时一定要注意,以避免错误删除结果记录。)

    2.FOR ALL ENTRIES IN后面使用的内部表itab如果为空,系统将当前CLIENT下所有记录选出。因此为避免无意义的检索,在使用该语句前一定要判断内部表itab是否为空,为空时不执行包含该语句的数据库检索处理。

    3.由于itab-f实际上是作为占位符被替换,所以内部表itab中不要包含HEADER行(项目标识名称行),以免造成混淆,检索出错。

    4.内部表itab中作为条件替换用项目的类型和长度,一定要和检索数据库中对应的项目相同,否则编译不能通过。

    5.对于内部表itab中作为条件替换用项目,不能使用LIKE,BETWEEN,IN比较操作符。

    6.使用该语句时,ORDER BY语句和HAVING语句将不能使用。

    7.使用该语句时,除COUNT( * )以外的所有合计函数(MAX,MIN,AVG,SUM)都不能使用。 

    -----------------------------------------------------------------------------------------------

    同时,可用 FOR ALL ENTRIES IN 语句代替 Open sql 的INNER JOIN 语句:

    ①INNER JOIN 语句:

    1 SELECT DISTINCT knb1~bukrs t001~butxt
    2     FROM knb1 INNER JOIN t001
    3     ON knb1~bukrs = t001~bukrs
    4     INTO CORRESPONDING FIELDS OF TABLE tb_bukrs
    5     WHERE kunnr IN rn_kunnr.

    ②FOR ALL ENTRIES IN 语句

    复制代码
     1 SELECT DISTINCT bukrs 
     2   INTO CORRESPONDING FIELDS OF TABLE gt_knb1
     3   FROM knb1.
     4 
     5 IF gt_knb1[] IS NOT INITIAL.
     6 SELECT DISTINCT butxt FROM t001
     7  INTO CORRESPONDING FIELDS OF TABLE gt_too1
     8  FOR ALL ENTRIES IN gt_knb1
     9  WHERE bukrs = gt_knb1-bukrs.
    10 END IF.
  • 相关阅读:
    121. Best Time to Buy and Sell Stock
    70. Climbing Stairs
    647. Palindromic Substrings
    609. Find Duplicate File in System
    583. Delete Operation for Two Strings
    556 Next Greater Element III
    553. Optimal Division
    539. Minimum Time Difference
    537. Complex Number Multiplication
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/Sapbruce/p/3906967.html
Copyright © 2011-2022 走看看