我有函数模块,该模块导入 my_values
my_values
是字符串的自定义内部表类型。
此" my_values"变量包含:[" foo"," bar"]
我想从表Z_MYTAB
中选择所有值my_col
在my_values中。
我尝试了:
SELECT * FROM Z_MYTAB WHERE
my_col in @my_values INTO TABLE @DATA(my_rows).
但这会失败,而错误消息:
表my_values的行错误
(该消息被翻译成英文。原件可能略有不同)
我可以通过my_values
循环,但我想避免这种情况。
如何使用内部表的主机变量进行SQL IN
?
仅在范围表中选择IN
。
可以这样将内部表转换为范围表:
DATA ltr_value TYPE RANGE OF string.
ltr_value = VALUE #( FOR <my_value> IN my_values
( sign = 'I'
option = 'EQ'
low = <my_value> )
).
openands中的2种类型:
SELECT ... WHERE my_col IN ( value1, value2 , value3)
在这种情况下,没有主机表达式可以用作正确的操作数
SELECT ... WHERE my_col IN sel_tab[]
在这种情况下,sel_tab是
之类的范围因此您可以使用以下内容:
DATA sel_tab type range of string.
sel_tab = value #( for ls in my_values ( sign = 'I' option = 'EQ' low = ls ) ).
SELECT * FROM Z_MYTAB WHERE
my_col in @sel_tab[] INTO TABLE @DATA(my_rows).
最好的问候
用户jozsefszikszai指出了我"选择所有条目"。
我在文档中找到了这一点:
对于基本行类型,必须为Comp指定伪组件table_line。
请参阅:https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-us/abenwhere_logexp_itab.htm
IF my_values is initial.
exit.
endif.
SELECT * FROM Z_MYTAB
FOR ALL ENTRIES IN @my_values WHERE
column_name = @my_values-table_line
INTO TABLE @DATA(result_rows).