检查 WHERE 子句中STRING_TABLE中的值



我有一个参数为IT_ATINN的过程:

IMPORTING 
REFERENCE(IT_ATINN) TYPE  STRING_TABLE

IT_ATINN包含特征列表。

我有以下代码:

LOOP AT values_tab INTO DATA(value).
SELECT ( @value-INSTANCE ) AS CUOBJ
FROM  IBSYMBOL
WHERE SYMBOL_ID = @value-SYMBOL_ID 
AND ATINN ???                       "<======== HERE ???
APPENDING TABLE @DATA(ibsymbol_tab).
ENDLOOP.

如何检查ATINN(在 WHERE 子句中(是否等于IT_ATINN中的任何条目?

为了实现你想要的(我假设你想要动态的 SELECT 字段(,你不能在这里使用内联声明,无论是在 LOOP 还是在 SELECT 中:

结果集的结构必须是静态可识别的。必须静态指定 SELECT 列表和 FROM 子句,并且 SELECT 列表中的主变量不能是泛型的。

因此,要么使用内联,要么使用动态,而不是两者兼而有之。

以下是说明桑德拉好建议的片段:

TYPES: BEGIN OF ty_value_tab,
instance  TYPE char18,
symbol_id TYPE id,
END OF ty_value_tab.
DATA: it_atinn TYPE string_table.
DATA: rt_atinn     TYPE RANGE OF atinn,
value        TYPE ty_value_tab,
values_tab   TYPE RANGE OF ty_value_tab,
ibsymbol_tab TYPE TABLE OF ibsymbol.
rt_atinn = VALUE #( FOR value_atinn IN it_atinn ( sign = 'I' option = 'EQ' low = value_atinn ) ).
APPEND VALUE ty_value_tab( instance = 'ATWRT' ) TO values_tab.
LOOP AT values_tab INTO value.
SELECT (value-instance)
FROM ibsymbol
WHERE symbol_id = @value-symbol_id
AND atinn IN @rt_atinn
APPENDING CORRESPONDING FIELDS OF TABLE @ibsymbol_tab.
ENDLOOP.

总的来说,在循环中选择ibsymbol是没有意义的,因为它只有 8 个字段,因此您可以轻松地从values_tab收集所有必要的字段并将它们作为动态字段字符串传递。

如果要对动态字段使用别名CUOBJ,则应像这样添加它:

LOOP AT values_tab INTO value.
DATA(aliased_value) = value-instance && ` AS cuobj `.
SELECT (aliased_value)
...

请记住,您的别名应该存在于ibsymbol字段中,否则在静态ibsymbol_tab声明的情况下,此语句将抛出一个简短的转储。

最新更新