Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598530
  • 博文数量: 154
  • 博客积分: 10208
  • 博客等级: 上将
  • 技术积分: 2225
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-16 14:02
文章分类

全部博文(154)

文章存档

2012年(4)

2011年(44)

2010年(50)

2009年(4)

2008年(52)

我的朋友

分类:

2010-04-03 00:09:26

  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。
阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~