Abap 操作数中OpenSQL的正确类型

Abap 操作数中OpenSQL的正确类型,abap,opensql,Abap,Opensql,我有导入我的_值的功能模块 my_值是字符串的自定义内部表类型 此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_值的行结构错误 消息被翻译成英语。原作可能略有不同 我可以循环使用我的_值

我有导入我的_值的功能模块

my_值是字符串的自定义内部表类型

此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_值的行结构错误

消息被翻译成英语。原作可能略有不同

我可以循环使用我的_值,但我希望避免这种情况

如何使用内部表中的主机变量执行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中,可以有两种类型:

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指定伪组件表_行

见:


我担心这是不可能的,在一个范围内是预期的,这在技术上也是一个内部表,只是结构给出了符号,选项,低,高。您有两个选项:将my_值更改为一个范围,或用于表my的所有条目,而不是IN_values@JozsefSzikszai谢谢你的提示。我现在使用了所有条目,并在下面写了一个答案。请注意,在第一个变体中,value1中的value1之前不应有空格,…我在7.52中使用,但是它仍然不是一个有效的语法my_col IN@VALUE ty_range\u my_col sign='I'option='EQ'low='value1'low='value2'在7.53中仍然不可用,根据文档,主机表达式在第一个变量中是不可能的,但是主机变量是可能的:其中my_col IN@value1,@值2以及“foo”和“bar”中的非宿主经典文本
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).