簡體   English   中英

程序中錯誤 DBIF_RSQL_INVALID_RSQL CX_SY_OPEN_SQL_DB

[英]Error DBIF_RSQL_INVALID_RSQL CX_SY_OPEN_SQL_DB in program

我收到以下錯誤:DBIF_RSQL_INVALID_RSQL CX_SY_OPEN_SQL_DB(Open SQL 命令太大。Open SQL 命令的條件 WHERE 包含太多條件)。 錯誤指向以下行:

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.

我是 ABAP 的新手,希望得到任何幫助!

當您使用具有太多條目供數據庫處理的范圍/選擇選項時,會發生該錯誤。 對此的解決方案始終取決於使用情況,但在任何情況下,您都必須限制范圍內的條目數。

在您的情況下,您只需要數據庫中最多 250 行。 因此,如果 R_MID 填充了包含單個 ID 的所有行,您可以檢查其中的行數 (LINES( R_MID) ),如果行數多於 250,則將其限制為 250。 在大多數系統中,這將消除錯誤。

我只是在這里猜測,但您的范圍r_mid可能有數百行,如下所示:

r_mid-sign   = 'I'.
r_mid-option = 'EQ'.
r_mid-low    = '123123123'.
r_mid-high   = ''.

因此,您可以將這些 ID 存儲在內部表中。 您甚至可以首先使用您循環的內部表來填充r_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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM