Abap 错误DBIF\U RSQL\U无效\U RSQL CX\U SY\U OPEN\U SQL\U程序中的数据库

Abap 错误DBIF\U RSQL\U无效\U RSQL CX\U SY\U OPEN\U SQL\U程序中的数据库,abap,opensql,Abap,Opensql,我得到了以下错误:DBIF_RSQL_INVALID_RSQL CX_SY_OPEN_SQL_DB(OPEN SQL命令太大。其中OPEN SQL命令的条件包含太多条件)。错误指向以下行: select * from Z3T_MAILS into table t_full_mail UP TO 250 ROWS where ID in r_mid and (p_dat_clause). 代码的其他部分: DATA: p_dat_clause type STRING, t_fu

我得到了以下错误:DBIF_RSQL_INVALID_RSQL CX_SY_OPEN_SQL_DB(OPEN SQL命令太大。其中OPEN SQL命令的条件包含太多条件)。错误指向以下行:

select * from Z3T_MAILS into table t_full_mail UP TO 250 ROWS where ID in r_mid  and (p_dat_clause).
代码的其他部分:

    DATA: p_dat_clause type STRING,
    t_full_mail type Z3TT_MAILS,
    r_mid       type range of Z3E_MAIL_ID.

 <...>

  if not NOT_READED is initial.
    p_clause = 'ISREAD = '''''.
  endif.

  if DATETO is initial.
    p_dateto = DATEFROM.
  else.
    p_dateto = DATETO.
  endif.
  if not DATEFROM is initial or not DATETO is initial.
    concatenate 'SEND_DATE >= ''' DATEFROM  ''' and SEND_DATE <= ''' p_dateto '''' into p_dat_clause.
  endif.

    <...>

      if MAILS is supplied  or  BODY is supplied  or  p_dat_clause ne ''.
        if not r_mid[] is initial.
          select * from Z3T_MAILS into table t_full_mail UP TO 250 ROWS where ID in r_mid  and (p_dat_clause).
        endif.
      endif.
DATA:p_dat_子句类型字符串,
完整邮件类型Z3TTU邮件,
Z3E_邮件ID的r_中间类型范围。
如果没有,则读取的是首字母。
p_子句='ISREAD='。
恩迪夫。
如果DATETO是首字母。
p_dateto=DATEFROM。
其他的
p_dateto=dateto。
恩迪夫。
如果不是DATEFROM,则为首字母,否则DATETO为首字母。

将“SEND_DATE>=”DATEFROM''和“SEND_DATE连接起来。当您使用的范围/选择选项的条目太多,数据库无法处理时,会发生此错误。解决方案始终取决于使用情况,但在任何情况下都必须限制范围内的条目数


在您的情况下,您只需要数据库中最多250行。因此,如果R_MID被包含单个ID的所有行填充,那么您可以检查其中的行数(行(R_MID))并将其限制为250(如果超过250)。在大多数系统中,这将消除错误。

我只是在这里猜测,但您的范围
r\u mid
可能有数百行类似于以下内容:

r_mid-sign   = 'I'.
r_mid-option = 'EQ'.
r_mid-low    = '123123123'.
r_mid-high   = ''.
因此,您可以将这些ID存储在一个内部表中。您甚至可以首先使用正在循环的内部表来填充
r\u mid

另一方面,日期变量实际上非常适合声明为单个范围:

 r_date-sign   = 'I'.
 r_date-option = 'BT'. 
 r_date-low    = datefrom.
 r_date-high   = dateto.
还要注意有关范围的信息

最后,您可以按如下方式编写查询:

SELECT *
   FROM z3t_mails
   INTO TABLE t_full_mail
   FOR ALL ENTRIES IN lt_mid
   WHERE id EQ lt_mid-id
   AND send_date IN r_date.

那么什么是
p_dat_子句
?r_mid包含多少条目?@Wain编辑了原始问题以显示it@vwegert对我来说是66,但对其他用户来说可能要大得多(他们实际上犯了这个错误),我不明白你在期待什么样的“帮助”。错误信息非常清楚。