Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Select statement

Former Member
0 Likes
629

Hi All

I would like to check if my understanding is correct.

Are the both example below performing the same looping?

If so, what is better recommended: use "select endselect" or loop at an internal table ?

Many thanks.

Cristina

Example 1:

SELECT * FROM vbak

WHERE

kunnr = gv_kunnr AND

erdat IN zdate

CHECK sy-subrc = 0.

"do something"

ENDSELECT.

Example 2:

SELECT *

INTO CORRESPONDING FIELDS OF TABLE IT_VBAK

FROM vbak

WHERE kunnr = gv_kunnr AND

erdat IN zdate.

IF sy-subrc = 0.

LOOP AT it_vbak.

"do something"

ENDLOOP.

ENDIF.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
601

SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_VBAK

FROM vbak WHERE kunnr = gv_kunnr AND

erdat IN zdate.

IF sy-subrc = 0.

LOOP AT it_vbak.

"do something"

ENDLOOP.

ENDIF.

---Suggestable,but

instead of ussing INTO CORRESPONDING,create an internal table with the required fields and use <b>into table it_vbak</b> for better way.

Thanks

Eswar

5 REPLIES 5
Read only

Former Member
0 Likes
601

Database should not be hit often so it is always better to use the second option.

SELECT *

INTO CORRESPONDING FIELDS OF TABLE IT_VBAK

FROM vbak

WHERE kunnr = gv_kunnr AND

erdat IN zdate.

IF sy-subrc = 0.

LOOP AT it_vbak.

"do something"

ENDLOOP.

ENDIF.

Regards,

Prakash.

Read only

Former Member
0 Likes
601

Yes both of them behave the same way.

The best way to do is the second one. You need to get all the data into an ITAB and play with it. This is becuase when you use SELECT...ENDSELECT the database connection is open untill the whole data is looped through.

Read only

Former Member
0 Likes
602

SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_VBAK

FROM vbak WHERE kunnr = gv_kunnr AND

erdat IN zdate.

IF sy-subrc = 0.

LOOP AT it_vbak.

"do something"

ENDLOOP.

ENDIF.

---Suggestable,but

instead of ussing INTO CORRESPONDING,create an internal table with the required fields and use <b>into table it_vbak</b> for better way.

Thanks

Eswar

Read only

Former Member
0 Likes
601

Both are doing the same but if you want a more efficient way then your example 2 is better. The reason being, in Select-EndSelect there is a connection to the DB server and might take a lot of time compared to example 2.

hith

Sunil Achyut

Read only

Former Member
0 Likes
601

Hi

1. It's useless to insert a CHECK SY-SUBRC = 0 statament into a SELECT/ENDSELECT, if it's into SELECT/ENDSELECT it means SELECT is done successefully so SY-SUBRC = 0:

SELECT * FROM vbak WHERE kunnr = gv_kunnr AND

erdat IN zdate

  • CHECK sy-subrc = 0. <------- Remove it

"do something"

ENDSELECT.

2. Here that control is useless, because if SY-SUBRC <> 0 it means no data was extracted so LOOP/ENDLOOP won't work and I don't believe you can see perfomance different so:

SELECT *

INTO CORRESPONDING FIELDS OF TABLE IT_VBAK

FROM vbak

WHERE kunnr = gv_kunnr AND

erdat IN zdate.

LOOP AT it_vbak.

"do something"

ENDLOOP.

Anyway it's always better to work on internal table and SELECT ...INTO TABLE is faster than SELECT/ENDSELECT so the second option is better than first one.

Max