[ ABAP老白 ](javascript:void\(0\);)
**QQ交流群:15881589(付费的,爱加不加)**
上一个坑讲到了FOR ALL ENTRIES,今天来说一说RANGE。
何谓RANGE?
RANGE就是在选择屏幕上常用的多选,其本质是一个有固定结构的内表。
RANGE有两种定义方式,
1、常用定义方式,用在选择屏幕上面:
2、不常用定义方式,一般用在不需要在选择屏幕显示的情况:
3、奇葩定义方式,因为RANGE本质上就是一个内表,而且只要数据类型正确,字段名SAP不怎么CARE。(因为奇葩,所以大家不要用)
RANGE有两个常见坑:
**1、如果RANGE为空,则 IN RANGE总是为TRUE。**
比如:
如果s_matnr为空,会取出ersda = 20140924的数据。
现在换个写法,把AND换为OR:
因为 matnr IN s_matnr 为真,所以这个语句会取出所有的MARA的数据。
**敲黑板:** 这一点在非SQL的逻辑表达式更容易出错,如下例,会输出Y!
**2、RANGE数据太多会造成程序DUMP**
在SQL中使用RANGE的时候,会把所有的数据都放到一个SQL语句里面,因为SQL语句是有长度限制的,所以如果RANGE数据太多,就造成SQL语句超长,程序就会DUMP了。
所以,要避免在RANGE里面放太多的数据。
**
**