我有导入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
?
答案 0 :(得分:3)
只有在range表中才能使用IN
进行选择。
可以将内部表转换为范围表:
DATA ltr_value TYPE RANGE OF string.
ltr_value = VALUE #( FOR <my_value> IN my_values
( sign = 'I'
option = 'EQ'
low = <my_value> )
).
答案 1 :(得分:3)
在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).
最诚挚的问候
答案 2 :(得分:2)
用户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).