5

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

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

但我不能对 dbtab 列使用偏移量。我怎么解决这个问题?

我试图避免像这样的循环

  SELECT DISTINCT * FROM  dbtab
     WHERE  field2        IN s_field2.
       IF field1+7(16)  IN s_field1
           ...
       endif.
  endselect.
4

2 回答 2

6

您不能在 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 进行排序。字段符号也可以是另一种选择。

希望能帮助到你。

于 2016-01-15T16:58:33.493 回答
1

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

您还可以使用 LIKE 子句,它不如准确知道偏移量那么有效,但允许您使用 % 封装每个选项:WHERE field 1 LIKE '%search_partial%' OR field1 LIKE ...

这是什么用例,如果我们有一些上下文,可能会有更合适的选择。

于 2016-01-16T00:41:55.143 回答