使用FOR ALLl ENTRIES存在的风险

995阅读 0评论2010-04-03 jiarui1230
分类:

  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。
上一篇:PA30视图数据保存时增强
下一篇:CRM WebClient Architecture