‎2009 Oct 05 7:49 AM
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?
‎2009 Oct 05 7:56 AM
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
‎2009 Oct 05 7:53 AM
Can you post the code? using select....endselect is not advisable.
‎2009 Oct 05 7:59 AM
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.
‎2009 Oct 05 8:04 AM
>
> 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.
‎2009 Oct 05 8:06 AM
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
‎2009 Oct 05 8:08 AM
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.
‎2009 Oct 05 2:21 PM
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
‎2009 Oct 05 7:56 AM
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
‎2009 Oct 05 7:56 AM
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.
‎2009 Oct 05 2:13 PM