我的选择屏幕上有几个复选框。每个复选框对应一个表的字段可以采用的值。然后,我必须激发一个选择查询,其中表的特定字段可以具有其相应复选框被选中的所有值。
假设我有5个对应于值a1-a5的复选框。现在,如果复选框1、3和4被选中,则表的字段可以具有值a1或a3或a4。
select * from table where field = a1 or field = a2 or field = a3.
一种方法是创建5个变量,然后进行类似的操作
if checkbox1 checked
then var1 = a1
else
var1 = '0' //something which would never occur in the field of the table
依此类推所有复选框。
然后
select * from table where field = var1 or field = var2 or field = var3 or field = var4 or field = var5.
如果有15个复选框,这将变得困难。有更好的方法吗?
为此使用选择选项/范围表:
DATA field_range TYPE RANGE OF data_type_of_table_field.
IF p_check1 = abap_true.
field_range = VALUE #( BASE field_range ( sign = 'I' option = 'EQ' low = 'A1' ) ).
ENDIF.
IF p_check2 = abap_true.
field_range = VALUE #( BASE field_range ( sign = 'I' option = 'EQ' low = 'A2' ) ).
ENDIF.
" ...
SELECT whatever FROM wherever WHERE field IN field_range.
注意:空范围表将匹配任何内容("无限制")并获取数据库表的全部内容,因此通常需要单独检查。
像这样尝试
select * from table where field IN (a1,a2,a3 ...)
一种可能的方法:将检查值附加到内部表,然后在select语句中使用FOR ALL ENTRIES。