The ABAP program gives a short dump due to an "DBIF_RSQL _INVALID_RSQL" error at the SQL statement below.
kslvt ksl01 ksl02 ksl03 ksl04
ksl05 ksl06 ksl07 ksl08 ksl09
ksl10 ksl11 ksl12
INTO TABLE i_glpct2
WHERE rldnr = '8A'
AND rvers = '000'
AND ryear = p_gjahr
AND rrcty = '0'
AND rbukrs IN s_bukrs
AND rprctr IN r_prctr
AND racct IN s_hkont
AND (racct IN r_profloss OR racct IN r_balsheet).
In the above select query in the where condition, the range of r_prctr contains about 24,500 entries. When commented on, this particular condition is not going to dump.
In the dump, it is being suggested that the maximum size of the SQL statement was exceeded. The statement contains too many input variables and the input data requires more space than is available. I tried to fix this by putting in all entries for that particular range (i.e., r_prctr), but to no avail.
You need to make r_prctr smaller. R_prctr is a table of structure SIGN, OPTION, LOW and HIGH. I assume that all your SIGN fields are 'I' and your OPTION fields are 'EQ'. If the LOW fields are all in sequence, then you could simply change all of those to 'I', 'BT' and set the LOW and HIGH field accordingly.
If there's no exploitable pattern in the contents of r_prctr, create another range object of the same structure (i.e., r_tmp). In a loop pass, on each iteration, the next few thousand records of r_prctr to r_tmp. (Look the ABAP keyword: APPEND LINES OF). Change your select to use r_tmp instead of r_prctr, and APPENDING TABLE instead of INTO TABLE.
Dig Deeper on SAP ABAP
Related Q&A from Matthew Billingham
An SAP user needs to transfer customer purchase order spreadsheet data to SAP VA01 to create a new sales order. Continue Reading
An SAP user is trying to run a report in an SAP ALV Grid online and wants to know how to get the data in the report to appear along with the header. Continue Reading
A SearchSAP.com reader who is writing a program to update SAP tables wants to know how to make updates visible in a change log by using an SAP change... Continue Reading