range 변수를 사용하면
where 구문에 ( 필드 = range-row OR 필드 = range-row OR ~~ )
이런식으로 붙기때문에
SQL문을 한번만 수행하는게 맞습니다.
저도 10000 개의 데이터를 넣어서 SQL문을 날려보니 덤프 에러가 떨어지네요.
원인으로는 SQL문의 WHERE 조건이 너무 길어져서 인것 같습니다.
대처 방안으로는 FOR ALL ENTRY 구문을 사용는게 좋을것 같습니다.
다만, FOR ALL ENTRY 구문이나 LOOP AT 랭지변수. ENDLOOP. 나 퍼포먼스 측면에서 큰 차이가 없을 거 같습니다.
이건 질문 내용을 보니 이미 알고 계신 것 같네요.
저도 좀 더 고민해보고 좋은 해결책이 나오면 다시 답변드리겠습니다.
REPORT Z17_021 .
ranges : l_r for sflight-carrid.
DATA : GT_SFLIGHT TYPE TABLE OF SFLIGHT.
do 10000 times.
l_r-low = sy-tabix.
l_r-sign = 'I'.
L_R-OPTION = 'EQ'.
APPEND L_R.
enddo.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FROM SFLIGHT
WHERE CARRID IN L_R.
--------------------------------------------------------------------
Possible errors:
o The maximum size of an SQL statement has been exceeded.
o The statement contains too many input variables.
o The space needed for the input data exceeds the available memory.
o ...
How to correct the error
The SAP Open SQL statement must be divided into several smaller units.
If the problem occurred due to the use of an excessively large table
in an IN itab construct, you can use the addition FOR ALL ENTRIES
instead.