SELECT语句中使用FOR ALL ENTRIES时,SAP系统在将OPEN SQL转换成NATIVE SQL时将进行如下形式的转换:
SELECT CARRID
CONNID
PRICE
FROM SFLIGHT
INTO TABLE IT_PRICE
FOR ALL ENTRIES IN IT_SFLIGHT
WHERE CARRID = IT_SFLIGHT-CARRID
AND CONNID = IT_SFLIGHT-CONNID'.
To:
SELECT DISTINCT CARRID
CONNID
PRICE
FROM SFLIGHT
INTO TABLE IT_PRICE
WHERE ( CARRID = 'LH' AND
CONNID = '2415' ) OR
( CARRID = 'SQ' AND
CONNID = '0026' ) OR
( CARRID = 'LH' AND
CONNID = '0400' ) .
也就是会将for all entries内表中的记录展开成or语句连接成 condition语句,这样当内表记录非常大时,该select语句亦非常的庞大。当这些选择条件达到一定的数量时就会出现 "DBIF_RSQL_INVALID_RSQL” 错误,这是由于后台数据库对于选择条件的数量是有一定的限制的,达到这个限制时就会出现如上运行时错误。不同的后台数据库这个限制数量也是不同的。
IN range table亦同。
解决方案:可以根据错误“DBIF_RSQL_INVALID_RSQL” 去SAP官网查找notes。
阅读(926) | 评论(0) | 转发(0) |