如有转载请注明出处:http://blog.csdn.net/donkey2004112103/archive/2009/05/03/4146114.aspx
abap中select语句里有几个需要注意的地方。如果要让选择的结果在某一个范围之内的话可以用between和in这两个关键字。大多数情况下二者的反映都是一样的,但是如果为空的情况就不一样了。如下:
WHERE vbeln BETWEEN pa_vb_s AND pa_vb_e.
WHERE VBELN IN pa_vb.
他们的定义如下:
SELECT-OPTIONS pa_vb FOR vbrk-vbeln.
PARAMETERS: pa_vb_s TYPE vbeln,
pa_vb_e TYPE VBELN.
如果他们都为空的话,between会限制select语句让它一条记录都无法选出来,但是in的话则相反,这个限制条件不会起任何作用,会选择出所有的记录。这是二者最大的区别。
但是有一个小小的陷阱,ranges变量和select-options感觉上时相同的。但是在用select语句的时候表现会不同。代码如下:
PARAMETERS: pa_vb_s TYPE vbeln,
pa_vb_e TYPE VBELN.
ranges pa_vb for VBRK-vbeln.
pa_vb-sign = 'I'.
pa_vb-option = 'BT'.
PA_VB-LOW = PA_VB_S.
PA_VB-HIGH = PA_VB_E.
APPEND pa_vb.
此时如果用刚才的select语句用in去限制的话,也会一条都选不出来!这里起初不明白为什么会这样,跟踪程序发现就在append这句话。如果用selct-options这句,在选择框里什么都不填的话,那么select-options这个ragnes变量里面是空值,就是内表记录数是0!相当于没有append。但是我们自定义ragnes变量的时候会append空值,即使没有输入。这样就和between的功效一样了。要想和selct-options的作用一样这样写就可以了。
IF PA_VB_S IS NOT INITIAL or PA_VB_E IS NOT INITIAL.
APPEND pa_vb.
ENDIF.
全部测试代码如下:
原文链接:https://www.f2er.com/vb/263076.html