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

using CALL FUNCTION 'READ_TEXT' between select.......endselect query

Former Member
0 Likes
1,118

I using CALL FUNCTION 'READ_TEXT' between select.......endselect query.

If loop goes to second times then sy-tabix goes to zero.so debugger occurs.why?

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,002

first thing, why do you need read text inside select endselect?

make the select fetch data into a internal table and loop at this table, use read text inside the loop

9 REPLIES 9
Read only

Former Member
0 Likes
1,002

Can you post the code? using select....endselect is not advisable.

Read only

0 Likes
1,002

SELECT PRUEFLOS KTEXTMAT MATNR ENSTEHDAT LOSMENGE MENGENEINH ERSTELLER INTO CORRESPONDING FIELDS OF WA_QALS FROM QALS WHERE QALS~AUFNR = IT_QALS-AUFNR ORDER BY PRUEFLOS ENSTEHDAT .

IT_QALS-PRUEFLOS = WA_QALS-PRUEFLOS.

MODIFY IT_QALS INDEX SY-TABIX.

IT_QALS-KTEXTMAT = WA_QALS-KTEXTMAT.

MODIFY IT_QALS INDEX SY-TABIX.

IT_QALS-MATNR = WA_QALS-MATNR.

MODIFY IT_QALS INDEX SY-TABIX.

IT_QALS-ENSTEHDAT = WA_QALS-ENSTEHDAT.

MODIFY IT_QALS INDEX SY-TABIX.

IT_QALS-LOSMENGE = WA_QALS-LOSMENGE.

MODIFY IT_QALS INDEX SY-TABIX.

IT_QALS-MENGENEINH = WA_QALS-MENGENEINH.

MODIFY IT_QALS INDEX SY-TABIX.

IT_QALS-ERSTELLER = WA_QALS-ERSTELLER.

MODIFY IT_QALS INDEX SY-TABIX.

DATA: BEGIN OF LTEXT OCCURS 50.

INCLUDE STRUCTURE TLINE.

DATA: END OF LTEXT.

DATA: TNAME LIKE THEAD-TDNAME.

MOVE '100040000001097L' TO TNAME.

data: en like THEAD-TDSPRAS.

en = 'EN'.

CALL FUNCTION 'READ_TEXT'

EXPORTING

  • CLIENT = SY-MANDT

ID = 'QAVE'

LANGUAGE = EN

NAME = TNAME

OBJECT = 'QPRUEFLOS'

  • ARCHIVE_HANDLE = 0

  • IMPORTING

  • HEADER = HTEXT

TABLES

LINES = LTEXT.

  • EXCEPTIONS

  • ID = 1

  • LANGUAGE = 2

  • NAME = 3

  • NOT_FOUND = 4

  • OBJECT = 5

  • REFERENCE_CHECK = 6

  • WRONG_ACCESS_TO_ARCHIVE = 7

  • OTHERS = 8.

loop at ltext.

write : / LTEXT.

endloop.

ENDSELECT.

ENDSELECT.

Read only

0 Likes
1,002

>

> using select....endselect is not advisable.

This is old Saying. Any SAP document which claim your statement?

I have used this at some certain places and it works well! For example, while fetching data from MAKT I want to truncate and concatenate material text with some additional transcript at the place of material text then I would use one temp variable and then append to internal table(in select-endselect), for doing so I can get rid of one additional loop.

Read only

0 Likes
1,002

SELECT    PRUEFLOS KTEXTMAT MATNR ENSTEHDAT LOSMENGE MENGENEINH ERSTELLER INTO CORRESPONDING FIELDS OF    IT_QALS  "Use internal table
  FROM   QALS WHERE  QALS~AUFNR = IT_QALS-AUFNR "modify this condition
ORDER BY PRUEFLOS ENSTEHDAT . "Donot use ordey by use sort on it_qals after select 
Read only

0 Likes
1,002

Hi,

Change it this way,



DATA: BEGIN OF LTEXT OCCURS 50.
INCLUDE STRUCTURE TLINE.
DATA: END OF LTEXT.

DATA: TNAME LIKE THEAD-TDNAME.

SELECT PRUEFLOS KTEXTMAT MATNR ENSTEHDAT LOSMENGE MENGENEINH ERSTELLER 
INTO CORRESPONDING FIELDS OF table  IT_QALS
FROM QALS 
WHERE AUFNR = p_aufnr.      "should be getting from a parameter

MOVE '100040000001097L' TO TNAME.
data: en like THEAD-TDSPRAS.
en = 'EN'.

CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
ID = 'QAVE'
LANGUAGE = EN
NAME = TNAME
OBJECT = 'QPRUEFLOS'
* ARCHIVE_HANDLE = 0
* IMPORTING
* HEADER = HTEXT
TABLES
LINES = LTEXT.
* EXCEPTIONS
* ID = 1
* LANGUAGE = 2
* NAME = 3
* NOT_FOUND = 4
* OBJECT = 5
* REFERENCE_CHECK = 6
* WRONG_ACCESS_TO_ARCHIVE = 7
* OTHERS = 8.
* 
loop at ltext.
write : / LTEXT.
endloop.

Read only

0 Likes
1,002

Hi Amit,

yes you are right. Using SELECT ... ENDSELECT will open the cursor for the database once and fetch the data in packets, default size for ORACLE is 65k.

But still it is not advisable, to do other SELECTS between SELECT and ENDSELECT. Function READ_TEXT will do that.

Rule of thumb: Use SELECT ... ENDSELECT for simple checks that can't be done using the WHERE clause or other simple modification of the data retrieved.

Regards,

Clemens

Read only

Former Member
0 Likes
1,004

first thing, why do you need read text inside select endselect?

make the select fetch data into a internal table and loop at this table, use read text inside the loop

Read only

Former Member
0 Likes
1,002

Do not use select endselect.

Use

select <fields> into itab from <table> where <conditions>.

Now loop at itab and call the read text inside this loop.

Read only

0 Likes
1,002

Kartik,

always INTO TABLE itab

Regards,

Clemens