Select 带偏移量的语句?
Select statement with offset?
我正在尝试在 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.
您不能在 OPEN 中使用偏移量 SQL。
我建议将 SELECT 制作成内部 table 并像这样循环它。
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.
另一方面,我还将内部 table 定义为 SORTED 或 HASHED,或者如果您更喜欢尝试按要进行比较的字段进行 SORT itab。字段符号也可以作为替代。
希望对您有所帮助。
如果您的策略允许,您可以使用 EXECUTE_SQL 块来代替,例如,如果您有 Oracle 后端,它允许您利用本机 SQL 构造,而不仅仅是 OPEN SQL。这是否合理取决于性能增益,这是一个判断电话。我觉得应该不是。
你也可以使用 LIKE 子句,它不如准确知道偏移量那么有效,但可以让你用 % 封装每个选项:WHERE field 1 LIKE '%search_partial%' OR field1 LIKE ...
什么是use-case,如果我们有一些上下文,可能会有更合适的选择。
我正在尝试在 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.
您不能在 OPEN 中使用偏移量 SQL。
我建议将 SELECT 制作成内部 table 并像这样循环它。
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.
另一方面,我还将内部 table 定义为 SORTED 或 HASHED,或者如果您更喜欢尝试按要进行比较的字段进行 SORT itab。字段符号也可以作为替代。
希望对您有所帮助。
如果您的策略允许,您可以使用 EXECUTE_SQL 块来代替,例如,如果您有 Oracle 后端,它允许您利用本机 SQL 构造,而不仅仅是 OPEN SQL。这是否合理取决于性能增益,这是一个判断电话。我觉得应该不是。
你也可以使用 LIKE 子句,它不如准确知道偏移量那么有效,但可以让你用 % 封装每个选项:WHERE field 1 LIKE '%search_partial%' OR field1 LIKE ...
什么是use-case,如果我们有一些上下文,可能会有更合适的选择。