在ABAP中选择带偏移量的语句

时间:2016-01-15 16:08:07

标签: select sap offset abap

我正在尝试在ABAP中使用这个SELECT语句:

  SELECT DISTINCT * FROM  dbtab
     INTO CORRESPONDING FIELDS OF TABLE itab
     WHERE  field1+7(16)  IN s_field1
     AND    field2        IN s_field2.

但我不能使用offset作为dbtab列。 我该如何解决这个问题?

我试图避免像

这样的循环
  SELECT DISTINCT * FROM  dbtab
     WHERE  field2        IN s_field2.
       IF field1+7(16)  IN s_field1
           ...
       endif.
  endselect.

2 个答案:

答案 0 :(得分:5)

您无法在OPEN SQL中使用偏移量。

我建议将SELECT转换为内部表并像这样循环它。

SELECT DISTINCT * FROM dbtab
INTO CORRESPONDING FIELDS OF TABLE itab
WHERE field2 IN s_field2.

LOOP AT dbtab into wa_itab.
  IF wa_itab-field1+7(16) IN s_field1
    ...
  ENDIF.
ENDLOOP.

另一方面,我还将内部表定义为SORTED或HASHED,或者如果您更喜欢尝试按正在进行比较的字段排序itab。字段符号也可以替代。

希望它有所帮助。

答案 1 :(得分:1)

如果您的策略允许您可以使用,则可能使用EXECUTE_SQL块,例如,如果您有Oracle后端,这允许您利用本机SQL构造而不仅仅是OPEN SQL。判断是否合理,取决于性能增益。我想这可能不是。

你也可以使用一个LIKE子句,它不能完全知道偏移量,但允许你用%WHERE field 1 LIKE '%search_partial%' OR field1 LIKE ...封装每个选项

对此有什么用例,如果我们有一些背景,可能会有更合适的选择。