构造一个select option

标签:ABAP

有时候想在where语句中使用in关键字,但select-options里没有向用户取范围,这时候就只能手工打造了。

这个用来代替的东西就是ranges,示例如下:
ranges : r_singlerole for agr_agrs-child_agr.

*取child_agr的值,放入i_range内表。代码略。

*用i_range中所有的child_agr构造r_singlerole。
  loop at i_range.
    r_singlerole-option = 'EQ'.
    r_singlerole-sign   = 'I'.
    r_singlerole-low    = i_range-child_agr.
    append r_singlerole.
  endloop.

*使用这个range
  select agr_name child_agr
         into  table i_agr_agrs
         from  agr_agrs
         where agr_name = roles
          and child_agr in r_singlerole.
顺便解释下,r_singlerole有几个字段:
option为'EQ'是表相等,其他还有不等于、大于之类的,你debug一个select option,看看它的内容就知道了。
sign可以为'I'或'E',分别表包含和不包含。
low是最低值,high是最高值。

当然,如果你取的i_range中数据太多,都用'EQ'的话就会导致r_singlerole非常庞大,性能就会有影响,因此只适用于数据较少的时候。
如果数据正好是有序的,你可以不用'EQ',而改为范围,从而压缩r_singlerole。

0条评论 你不来一发么↓

    想说点什么呢?