For all entries from 2 tables that have no common key
Hello
I have the next querry that i want to write in abap
AUFK -
>aufk-aufnr = afko- aufnr----> AFKO
AUFK---->aufk-pspel = afvc-projn -
>AFVC
AFKO-----> afko-rsnum = resb-rsnum -
> RESB
AFVC-----> afvc-aufpl = resb-aufpl -
> RESB
AFVC-----> afvc-vornr = resb-vornr -
> RESB
So that i have to start with AUFK and from there i read AFKO and AFVC and with the entries from AFKO and AFVC i have to do a select on RESB.
How can i do this
select from RESB
for all entries in AFKO
where ...
for all entries in AFVC
where... ?
I do not have any common key between AFVC and AFKO. How can i select the correct entries from RESB?
I have to mention that i have 1-1 entries for AUFK and AFKO
and 1-N entries for AUFK and AFVC
Thank you
Why don't you use afko-aufpl = afvc-aufpl ?
Regards,
Raymond
Similar Messages
-
For All Entries with two tables
Hi All,
Can we use FOR ALL ENTRIES with two tables. for example
SELECT * FROM MKPF INTO TABLE T_MKPF
WHERE BUDAT IN S_BUDAT.
SELECT * FROM MARA INTO TABLE T_MARA
WHERE MTART IN S_MTART AND
MAKTL IN S_MAKTL.
SELECT * FROM MSEG INTO TABLE T_MSEG
FOR ALL ENTRIES IN "T_MKPF AND T_MARA"
WHERE MBLNR EQ T_MKPF-MBLNR AND
MATNR EQ T_MARA-MATNR.
can we do it like this or any other way to do this plz tell. I waitting for your responce.
Thanks
JitendraHi,
u cannot do like this....chek some documentation on it..
1. duplicate rows are automatically removed
2. if the itab used in the clause is empty , all the rows in the source table will be selected .
3. performance degradation when using the clause on big tables.
Say for example you have the following abap code:
Select * from mara
For all entries in itab
Where matnr = itab-matnr.
If the actual source of the material list (represented here by itab) is actually another database table, like:
select matnr from mseg
into corresponding fields of table itab
where .
Then you could have used one sql statement that joins both tables.
Select t1.*
From mara t1, mseg t2
Where t1.matnr = t2.matnr
And T2 ..
So what are the drawbacks of using the "for all entires" instead of a join ?
At run time , in order to fulfill the "for all entries " request, the abap engine will generate several sql statements (for detailed information on this refer to note 48230). Regardless of which method the engine uses (union all, "or" or "in" predicates) If the itab is bigger then a few records, the abap engine will break the itab into parts, and rerun an sql statement several times in a loop. This rerun of the same sql statement , each time with different host values, is a source of resource waste because it may lead to re-reading of data pages.
returing to the above example , lets say that our itab contains 500 records and that the abap engine will be forced to run the following sql statement 50 times with a list of 10 values each time.
Select * from mara
Where matnr in ( ...)
Db2 will be able to perform this sql statement cheaply all 50 times, using one of sap standard indexes that contain the matnr column. But in actuality, if you consider the wider picture (all 50 executions of the statement), you will see that some of the data pages, especially the root and middle-tire index pages have been re-read each execution.
Even though db2 has mechanisms like buffer pools and sequential detection to try to minimize the i/o cost of such cases, those mechanisms can only minimize the actual i/o operations , not the cpu cost of re-reading them once they are in memory. Had you coded the join, db2 would have known that you actually need 500 rows from mara, it would have been able to use other access methods, and potentially consume less getpages i/o and cpu.
In other words , when you use the "for all entries " clause instead of coding a join , you are depriving the database of important information needed to select the best access path for your application. Moreover, you are depriving your DBA of the same vital information. When the DBA monitors & tunes the system, he (or she) is less likely to recognize this kind of resource waste. The DBA will see a simple statement that uses an index , he is less likely to realize that this statement is executed in a loop unnecessarily.
Beore using the "for all entries" clause and to evaluate the use of database views as a means to:
a. simplify sql
b. simplify abap code
c. get around open sql limitations.
check the links
http://www.thespot4sap.com/articles/SAPABAPPerformanceTuning_ForAllEntries.asp
The specified item was not found.
Regards,
Nagaraj -
For all entries on custom tables
i have created 2 custom tables::zhospital_info n zpatient_info..
zhospitalinfo tab fields:::_
doc_name::prim key
patient_name:::prim key
place::prim key
zpatientinfo tab fields::_
ZDATE ::prim key
JOINING
MEDICINE
PRICE
QUANTITY
DOC_NAME ::for key
PATIENT_NAME::for key
PLACE ::for key
and inserted some values to the table contents..
this is my logic:::
TYPES: BEGIN OF ZHOSPITAL_INFO,
DOC_NAME TYPE ZDOC_NAME,
PATIENT_NAME TYPE ZPATIENT_NAME,
PLACE TYPE ZPLACE,
END OF ZHOSPITAL_INFO.
DATA: W_HI TYPE ZHOSPITAL_INFO.
DATA:T_HI TYPE STANDARD TABLE OF ZHOSPITAL_INFO.
TYPES: BEGIN OF ZPATIENTL_INFO,
ZDATE TYPE ZDATE,
JOINING TYPE ZJOINING,
MEDICINE TYPE ZMEDICINE,
PRICE TYPE ZPRICE,
QUANTITY TYPE ZQUANTITY,
DOC_NAME TYPE ZDOC_NAME,
PATIENT_NAME TYPE ZPATIENT_NAME,
PLACE TYPE ZPLACE,
END OF ZPATIENTL_INFO.
DATA: W_PI TYPE ZPATIENTL_INFO.
DATA:T_PI TYPE STANDARD TABLE OF ZPATIENTL_INFO.
TYPES: BEGIN OF FTAB,
DOC_NAME TYPE ZDOC_NAME,
PATIENT_NAME TYPE ZPATIENT_NAME,
PLACE TYPE ZPLACE,
DATE TYPE ZDATE,
JOINING TYPE ZJOINING,
MEDICINE TYPE ZMEDICINE,
PRICE TYPE ZPRICE,
QUANTITY TYPE ZQUANTITY,
END OF FTAB.
DATA: W_FTAB TYPE FTAB,
T_FTAB TYPE STANDARD TABLE OF FTAB.
SELECT DOC_NAME
PATIENT_NAME
PLACE
INTO TABLE t_hi
FROM ZHOSPITAL_INFO .
IF NOT t_hi IS NOT INITIAL.
SELECT DOC_NAME
PATIENT_NAME
PLACE
ZDATE
MEDICINE*
PRICE
QUANTITY FROM ZPATIENTL_INFO INTO TABLE t_pi FOR ALL ENTRIES IN
t_hi
WHERE DOC_NAME = t_hi-doc_name.
ENDIF.
LOOP AT t_pi INTO w_pi.
MOVE-CORRESPONDING: w_pi TO W_FTAB.
READ TABLE t_hi INTO w_hi WITH KEY DOC_NAME = W_FTAB-DOC_NAME.
MOVE: w_hi-patient_name TO W_FTAB-PATIENT_NAME,
w_hi-place TO W_FTAB-PLACE.
APPEND W_FTAB TO T_FTAB.
ENDLOOP.
LOOP AT T_FTAB INTO W_FTAB.
WRITE:/ W_FTAB-DOC_NAME,
W_FTAB-PATIENT_NAME,
W_FTAB-PLACE,
W_FTAB-DATE,
W_FTAB-JOINING,
W_FTAB-MEDICINE,
W_FTAB-PRICE,
W_FTAB-QUANTITY.
ENDLOOP.
req output:::when i enter doc_name the related info accr to doc_name from the both tables should be display..
m getting no errors but i cant execute my prog..
please check out my code...
thanx in adv..Hi,
The problem is in the select statement:
SELECT DOC_NAME
PATIENT_NAME
PLACE
ZDATE
MEDICINE
PRICE
QUANTITY FROM ZPATIENTL_INFO INTO TABLE t_pi FOR ALL ENTRIES IN
t_hi
WHERE DOC_NAME = t_hi-doc_name.
Change this to SELECT DOC_NAME PATIENT_NAME PLACE ZDATE MEDICINE PRICE QUANTITY FROM ZPATIENTL_INFO INTO CORRESPONDING FIELDS OF TABLE t-pi FOR ALL ENTRIES IN t_hi WHERE DOC_NAME = t_hi-doc_name.
I hope the above code will help you...
Also i hope to tell the following for performance issues and also a good programming practice:
LOOP AT t_pi INTO w_pi.
MOVE-CORRESPONDING: w_pi TO W_FTAB.
READ TABLE t_hi INTO w_hi WITH KEY DOC_NAME = W_FTAB-DOC_NAME.
MOVE: w_hi-patient_name TO W_FTAB-PATIENT_NAME,
w_hi-place TO W_FTAB-PLACE.
APPEND W_FTAB TO T_FTAB.
ENDLOOP.
Please do a sy-subrc check after READ statement always...
LOOP AT t_pi INTO w_pi.
MOVE-CORRESPONDING: w_pi TO W_FTAB.
READ TABLE t_hi INTO w_hi WITH KEY DOC_NAME = W_FTAB-DOC_NAME.
If sy-subrc = 0.
MOVE: w_hi-patient_name TO W_FTAB-PATIENT_NAME,
w_hi-place TO W_FTAB-PLACE.
clear w_hi.
Endif.APPEND W_FTAB TO T_FTAB.
ENDLOOP.
Please revert back for clarifications.
Best Regards,
Suresh -
FOR ALL ENTRIES - CDHDR / CDPOS Tables
Hi,
I know there have been a lot of threads concerning the "for all entries" statement. Nevertheless I got a problem downloading the change document tables CDHDR/CDPOS with this statement and I haven't found anything in this forum regarding this special issue.
While trying the for all entries statement in the below manner for downloading first CDHDR and then the CDPOS for all entries of the selected CDHDR it took 3 days and didn't finish, so we aborted the ABAP. The JOIN statement doesn't work in a 4.6c environment for the Cluster tables, hence this isn't an option.
Can you give me some advise of how to improve downloading those tables in this way:
1. Download CDHDR with limitation of fields OBJECTCLAS and UDATE
2. Then Download CDPOS for all CHANGENR out of the first selection of CDHDR
This was the way I tried it:
SELECT
ACT_CHNGNO CHANGE_IND CHANGENR MANDANT OBJECTCLAS OBJECTID PLANCHNGNR TCODE UDATE USERNAME UTIME WAS_PLANND APPENDING CORRESPONDING FIELDS OF TABLE T_CDHDR FROM CDHDR WHERE UDATE IN s_UDAT1 AND OBJECTCLAS IN s_OBJE0.
ENDSELECT.
SELECT
CHANGENR CHNGIND CUKY_NEW CUKY_OLD FNAME MANDANT OBJECTCLAS OBJECTID TABKEY TABNAME UNIT_NEW UNIT_OLD VALUE_NEW VALUE_OLD INTO gs_CDPOS FROM CDPOS CLIENT SPECIFIED for all entries in T_CDHDR WHERE OBJECTCLAS IN s_OBJE2 AND MANDANT EQ T_CDHDR-MANDANT AND OBJECTCLAS EQ T_CDHDR-OBJECTCLAS AND CHANGENR EQ T_CDHDR-CHANGENR.
ENDSELECT.THis prg might b usefull to u
* Mass display or print Purchase Order History
* You can request report by :
* 1. Change date
* 2. User Name
* 3. Purchase Order Number
* 4. Vendor Code
* Written by : SAP Basis, ABAP Programming and Other IMG Stuff
* http://www.sap-img.com
REPORT ZPOCHANGE LINE-SIZE 132 NO STANDARD PAGE HEADING
LINE-COUNT 065(001)
MESSAGE-ID VR.
TABLES: DD04T,
CDHDR,
CDPOS,
DD03L,
DD41V,
T685T,
VBPA,
TPART,
KONVC,
EKKO.
SELECT-OPTIONS: XUDATE FOR CDHDR-UDATE,
XNAME FOR CDHDR-USERNAME,
XEBELN FOR EKKO-EBELN,
XLIFNR FOR EKKO-LIFNR.
SELECTION-SCREEN SKIP.
* TEXT-001 - Sorting Sequence
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: SUDATE RADIOBUTTON GROUP R1,
SNAME RADIOBUTTON GROUP R1,
SOBID RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF BLOCK BLK1.
DATA: WFLAG,
WCHANGENR LIKE CDHDR-CHANGENR.
DATA: INDTEXT(60) TYPE C.
DATA: BEGIN OF ICDHDR OCCURS 50.
INCLUDE STRUCTURE CDHDR.
DATA: END OF ICDHDR.
DATA: BEGIN OF ICDSHW OCCURS 50.
INCLUDE STRUCTURE CDSHW.
DATA: END OF ICDSHW.
DATA: BEGIN OF EKKEY,
EBELN LIKE EKET-EBELN,
EBELP LIKE EKET-EBELP,
ETENR LIKE EKET-ETENR,
END OF EKKEY.
DATA: BEGIN OF ITAB OCCURS 50,
BEGIN OF EKKEY,
EBELN LIKE EKET-EBELN,
EBELP LIKE EKET-EBELP,
ETENR LIKE EKET-ETENR,
END OF EKKEY,
CHANGENR LIKE CDHDR-CHANGENR,
UDATE LIKE CDHDR-UDATE,
UTIME LIKE CDHDR-UTIME,
USERNAME LIKE CDHDR-USERNAME,
CHNGIND LIKE CDSHW-CHNGIND,
FTEXT LIKE CDSHW-FTEXT,
OUTLEN LIKE CDSHW-OUTLEN,
F_OLD LIKE CDSHW-F_OLD,
F_NEW LIKE CDSHW-F_NEW,
END OF ITAB.
DATA: OLD_OBJECTID LIKE CDHDR-OBJECTID.
FIELD-SYMBOLS: <F_OLD>, <F_NEW>.
SELECT * FROM EKKO WHERE EBELN IN XEBELN AND
LIFNR IN XLIFNR.
CLEAR CDHDR.
CLEAR CDPOS.
CDHDR-OBJECTCLAS = 'EINKBELEG'.
CDHDR-OBJECTID = EKKO-EBELN.
PERFORM GETCHGDOCS.
ENDSELECT.
IF SUDATE = 'X'.
SORT ITAB BY UDATE EKKEY-EBELN CHANGENR EKKEY-EBELP
EKKEY-ETENR.
ELSEIF SNAME = 'X'.
SORT ITAB BY USERNAME EKKEY-EBELN CHANGENR EKKEY-EBELP
EKKEY-ETENR.
ELSE.
SORT ITAB BY EKKEY-EBELN CHANGENR EKKEY-EBELP EKKEY-ETENR.
ENDIF.
LOOP AT ITAB.
CLEAR: INDTEXT, EKKEY.
CASE ITAB-CHNGIND.
WHEN 'U'.
INDTEXT(50) = ITAB-FTEXT.
INDTEXT+51 = TEXT-020.
CONDENSE INDTEXT.
WHEN 'D'.
INDTEXT = TEXT-021.
WHEN 'E'.
INDTEXT(5) = ITAB-FTEXT.
INDTEXT+51 = TEXT-021.
CONDENSE INDTEXT.
WHEN 'I'.
INDTEXT = TEXT-022.
ENDCASE.
RESERVE 4 LINES.
IF WCHANGENR NE ITAB-CHANGENR.
WCHANGENR = ITAB-CHANGENR.
EKKEY = ITAB-EKKEY.
WRITE:/ ITAB-UDATE UNDER 'Change Date',
ITAB-UTIME UNDER 'Time',
ITAB-USERNAME UNDER 'User Name',
ITAB-EKKEY-EBELN UNDER 'PO No',
ITAB-EKKEY-EBELP UNDER 'Item',
ITAB-EKKEY-ETENR UNDER 'Sch No',
INDTEXT UNDER 'Changes'.
ELSEIF ITAB-EKKEY NE EKKEY.
WRITE:/ ITAB-EKKEY-EBELP UNDER 'Item',
ITAB-EKKEY-ETENR UNDER 'Sch No',
INDTEXT UNDER 'Changes'.
ENDIF.
CASE ITAB-CHNGIND.
WHEN 'U'.
ASSIGN ITAB-F_OLD(ITAB-OUTLEN) TO <F_OLD>.
ASSIGN ITAB-F_NEW(ITAB-OUTLEN) TO <F_NEW>.
WRITE: / TEXT-023 UNDER 'Changes',
<F_OLD>.
WRITE: / TEXT-024 UNDER 'Changes',
<F_NEW>.
WHEN 'E'.
ASSIGN ITAB-F_OLD(ITAB-OUTLEN) TO <F_OLD>.
WRITE: TEXT-023 UNDER 'Changes',
<F_OLD>.
ENDCASE.
SKIP.
ENDLOOP.
TOP-OF-PAGE.
WRITE:/ SY-DATUM,SY-UZEIT,
50 'P U R C H A S E O R D E R H I S T O R Y',
120 'Page', SY-PAGNO.
WRITE: / SY-REPID,
60 'Purchase Orders Changes'.
SKIP.
ULINE.
IF SUDATE = 'X'.
WRITE:/001 'Change Date',
014 'Time',
024 'User Name',
038 'PO No',
050 'Item',
057 'Sch No',
065 'Changes'.
ELSEIF SOBID = 'X'.
WRITE:/001 'PO No',
013 'Item',
020 'Sch No',
028 'Change Date',
041 'Time',
051 'User Name',
065 'Changes'.
ELSE.
WRITE:/001 'User Name',
015 'Change Date',
028 'Time',
038 'PO No',
050 'Item',
057 'Sch No',
065 'Changes'.
ENDIF.
ULINE.
FORM GETCHGDOCS.
CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
EXPORTING
DATE_OF_CHANGE = CDHDR-UDATE
OBJECTCLASS = CDHDR-OBJECTCLAS
OBJECTID = CDHDR-OBJECTID
TIME_OF_CHANGE = CDHDR-UTIME
USERNAME = CDHDR-USERNAME
TABLES
I_CDHDR = ICDHDR
EXCEPTIONS
NO_POSITION_FOUND = 1
OTHERS = 2.
CHECK SY-SUBRC EQ 0.
DELETE ICDHDR WHERE CHANGE_IND EQ 'I'.
CHECK NOT ICDHDR[] IS INITIAL.
LOOP AT ICDHDR.
CHECK ICDHDR-UDATE IN XUDATE.
CHECK ICDHDR-USERNAME IN XNAME.
CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'
EXPORTING CHANGENUMBER = ICDHDR-CHANGENR
IMPORTING HEADER = CDHDR
TABLES EDITPOS = ICDSHW
EXCEPTIONS NO_POSITION_FOUND = 1
OTHERS = 2.
CHECK SY-SUBRC EQ 0.
LOOP AT ICDSHW.
CHECK ICDSHW-TEXT_CASE EQ SPACE.
MOVE-CORRESPONDING ICDSHW TO ITAB.
MOVE-CORRESPONDING ICDHDR TO ITAB.
MOVE ICDSHW-TABKEY+3 TO ITAB-EKKEY.
APPEND ITAB.
ENDLOOP.
ENDLOOP.
ENDFORM.
* END OF PROGRAM -
How to use dynamic internal table with FOR ALL ENTRIES
Hello SDNers,
I am having a dynamic internal table & want to use FOR ALL ENTRIES(FAE) using this dyn. table.
This works fine for me:
IF <lt_tmp> IS NOT INITIAL. "<lt_tmp> is my dyn. internal table
SELECT field1 field2
FROM TABLE ztable
INTO TABLE itab "Itab is a static table
FOR ALL ENTRIES IN <lt_tmp>
WHERE (lv_dynwhere). "lv_dynwhere -> dynamic where clause
ENDIF.
SAP documentation says:
"The logical expression sql_cond of the WHERE condition can be comprised of several logical expressions using AND and OR. However, if FOR ALL ENTRIES is specified, there must be at least one comparison with a column of the internal table itab that can be specified statically or dynamically. "
How do we specify the column of the internal table dynamically ? Can we do something like this:
IF <lt_tmp> IS NOT INITIAL. "<lt_tmp> is my dyn. internal table
SELECT field1 field2
FROM TABLE
INTO TABLE itab "Itab is a static table
FOR ALL ENTRIES IN <lt_tmp>
WHERE key_field1 = (dynamic token for column1 of <lt_tmp>)
key_field2 = (dynamic token for column2 of <lt_tmp>)
ENDIF.
ENDIF.
Let me know if i am not clear about my requirement.
BR,
SuhasHello Thomas,
What i meant was something like this:
WHERE key_field1 = ('<LT_TMP-COL1>') AND
key_field2 = ('<LT_TMP-COL2>')
I am confused by what SAP means with "dynamic representation of internal table columns" in FAE ?
@Rob: I was referring to SAPNW 7.0 documentation & the phrase (release 6.40 & higher) is missing. Anyways fyi i am on ECC5.0 ABAP release 6.40.
@Subhankar: This is what Marcin had proposed in For all entries and dynamic table.
Thanks,
Suhas
Edited by: Suhas Saha on Apr 6, 2010 11:53 AM -
Performance issue with select query and for all entries.
hi,
i have a report to be performance tuned.
the database table has around 20 million entries and 25 fields.
so, the report fetches the distinct values of two fields using one select query.
so, the first select query fetches around 150 entries from the table for 2 fields.
then it applies some logic and eliminates some entries and makes entries around 80-90...
and then it again applies the select query on the same table using for all entries applied on the internal table with 80-90 entries...
in short,
it accesses the same database table twice.
so, i tried to get the database table in internal table and apply the logic on internal table and delete the unwanted entries.. but it gave me memory dump, and it wont take that huge amount of data into abap memory...
is around 80-90 entries too much for using "for all entries"?
the logic that is applied to eliminate the entries from internal table is too long, and hence cannot be converted into where clause to convert it into single select..
i really cant find the way out...
please help.chinmay kulkarni wrote:Chinmay,
Even though you tried to ask the question with detailed explanation, unfortunately it is still not clear.
It is perfectly fine to access the same database twice. If that is working for you, I don't think there is any need to change the logic. As Rob mentioned, 80 or 8000 records is not a problem in "for all entries" clause.
>
> so, i tried to get the database table in internal table and apply the logic on internal table and delete the unwanted entries.. but it gave me memory dump, and it wont take that huge amount of data into abap memory...
>
It is not clear what you tried to do here. Did you try to bring all 20 million records into an internal table? That will certainly cause the program to short dump with memory shortage.
> the logic that is applied to eliminate the entries from internal table is too long, and hence cannot be converted into where clause to convert it into single select..
>
That is fine. Actually, it is better (performance wise) to do much of the work in ABAP than writing a complex WHERE clause that might bog down the database. -
Select ... for all entries problem
Hi,
I'm making select statements to BKPF and BSEG, but I can't do an inner join between this two table because BSEG it's a cluster table so I have to do a SELECT... FOR ALL ENTRIES, but in SE16 I make the same query that I have writen in my program as shown below,
SELECT BUKRS BELNR GJAHR BUDAT MONAT
FROM BKPF INTO CORRESPONDING FIELDS OF TABLE it_bkpf
WHERE BUKRS = 'XXX'
AND GJAHR = '2005'
AND BELNR = '0000000250'. "just for proof
AND MONAT = '10'
The above query returns me 1 row in program and in SE16 and then I make the next query for BSEG to do the join
SELECT BUKRS BELNR GJAHR BSCHL SHKZG WRBTR HKONT
FROM BSEG INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs = it_bkpf-bukrs
and gjahr = it_bkpf-gjahr
and belnr = it_bkpf-belnr.
this query returns 897 rows and in SE16 this same query returns 901 rows
Why SELECT...FOR ALL ENTRIES brings me less rows affected by the query in SE16
Thanks for your help!!Hi,
Please use the following code for selcting the exact number of rows.
IF it_bkpf[] IS NOT INITIAL.
SELECT *
FROM BSEG INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
FOR ALL ENTRIES IN it_bkpf
WHERE bukrs = it_bkpf-bukrs
and gjahr = it_bkpf-gjahr
and belnr = it_bkpf-belnr.
ENDIF.
Instead of * ,you can specify the exact fields required along with all the key fields as selection fields.Also it is must to check the condition it_bkpf[] IS NOT INITIAL before using the statement FOR ALL ENTRIES IN it_bkpf.Suppose if this condition is not used and if it_bkpf is initial,it will fetch all entries from the table.
Reward if helpful.
Regards,
Aravind -
2 for all entries with different condition
Hi
i have an internal 2 internal table which have the following field
ITAB1 : Stock category, plant, storage location , SKU code (those value are given though flat file)
ITAB2 : Grid value , meterial NO, SKU code (those values are determine through a FM where we export the SKU code and it will retreive the matnr and grid value in an ITAB2)
I have to do select FROM database MCHB
with the condition Grid value , material NO , Stock category, plant, storage location
Note that gris value and matnr are found in two different internal table i was thinking of doing for all entries but
is it possible to do for all entries from 2 internal table
SELECT FOROM MCHB
FOR ALL ENTRIES in ITAB1
FOR ALL ENTRIES in ITAB2
WHERE
grid value = itab2-gridvalue
matnr = itab2-matnr
stock cat = itab1-stock cat
plant = itab1-plant
storage location = itab1-storage location
Please help on how to tackle this?Hi,
You have to create a new third internal table with the fields matnr, grid value, stock category, plant and storage location....
Then process the itab1 and get the process the itab2 for the corresponding SKU Code (which I believe is the common field for both of the internal tables) and then populate the third internal table itab3...
Then use the itab3 for the FOR ALL ENTRIES.
Thanks
Naren -
For all entries in read statement
hi
is there any command equivalent to for all entries in read statementHi,
You have to use Loop at...and move the values from the it_vbrp to the final internal table..
Example
LOOP AT IT_OUTPUT.
MOVE-CORRESPONDING IT_OUTPUT TO IT_FINAL.
LOOP AT IT_VBRP WHERE AUBEL = IT_OUTPUT-VBELN
AND AUPOS = IT_OUTPUT-POSNR.
MOVE-CORRESPONDING IT_VBRP TO IT_FINAL.
APPEND IT_FINAL.
ENDLOOP.
IF SY-SUBRC <> 0.
APPEND IT_FINAL.
ENDIF.
ENDLOOP.
Thanks,
Naren -
Hi All,
I have used FOR ALL ENTRIES statement in while selecting data based on some other internal table (to avoid select within loop).
While using FOR ALL ENTRIES, the target table (internal table in which data is getting stored) is getting affected.
The other fields are becoming zero and several rows gets delerted from the internal table after performing select query.
How to avoid this bug?
Kindly help me out....
Regards
Pavanhi after the for all entries statement did you used the read statement .
if not you will not get any data ..check this program..
tables:mara,marc.
data:begin of itab occurs 0,
matnr like mara-matnr,
end of itab.
data:begin of itab1 occurs 0,
matnr like marc-matnr,
werks like marc-werks,
end of itab1.
select matnr
from mara
into corresponding fields of table itab.
if itab is initial.
select matnr
werks
from marc
into table itab1
for all entries in itab
where matnr = itab-matnr.
loop at itab1.
read table itab with key matnr = itab-matnr.
write:/ itab1-matnr,itab1-werks.
endloop.
endif. -
Problem in FOR ALL ENTRIES IN statement
Hi Abaper,
I have a problem in FOR ALL ENTRIES IN statement.
I have a table /ccsht/na_estadi in this table for the particulat date there are 14 records, but my internal table read only 5 record.
Below is my code:
SELECT sociedad
xhotel_id
FROM /ccsht/mt_photel
INTO TABLE it_comp_hotel
WHERE sociedad IN p_comp
AND xhotel_id IN p_hotid.
BREAK-POINT.
SORT it_comp_hotel BY sociedad.
SELECT xhotel_id
xfecha_id
xocupacion
tot_habs_hotel
xnum_pax1
FROM /ccsht/na_estadi
INTO TABLE it_estadi "CORRESPONDING FIELDS OF TABLE it_estadi
FOR ALL ENTRIES IN it_comp_hotel
WHERE xhotel_id EQ it_comp_hotel-xhotel_id
AND xfecha_id IN p_date.
Can any one help me this issue.
Thanks in advance.
Thanks & Regards,
AmitHi Amit,
Try below
SELECT sociedad
xhotel_id
FROM /ccsht/mt_photel
INTO TABLE it_comp_hotel
WHERE sociedad IN p_comp
AND xhotel_id IN p_hotid.
BREAK-POINT.
* SORT it_comp_hotel BY sociedad. "Remove this SORT statement.
SELECT xhotel_id
xfecha_id
xocupacion
tot_habs_hotel
xnum_pax1
FROM /ccsht/na_estadi
INTO TABLE it_estadi
FOR ALL ENTRIES IN it_comp_hotel
WHERE xhotel_id EQ it_comp_hotel-xhotel_id
AND xfecha_id IN p_date.
Note: 1) i didn't find the these tables in my SAP system
2) If your table is still not fetching the data, tell me is it the Cluster table,. if yes,.. you need to
maintain the all the primary keys other wise you wont get the data in internal able.
hope this will help you out.
Regards! -
For all entries vs. subquery
saw sap help on performance... & saw that using subquery is better than for all entries?
i understand that using join may be the best method for joining a few tables..
for many tables, normally for all entries are used.
so how about subquery?
codes by sap..
Using for all entries...
SELECT * FROM SPFLI
INTO TABLE T_SPFLI
WHERE CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK'.
SELECT * FROM SFLIGHT AS F
INTO SFLIGHT_WA
FOR ALL ENTRIES IN T_SPFLI
WHERE SEATSOCC < F~SEATSMAX
AND CARRID = T_SPFLI-CARRID
AND CONNID = T_SPFLI-CONNID
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.
using subquery...
SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
WHERE SEATSOCC < F~SEATSMAX
AND EXISTS ( SELECT * FROM SPFLI
WHERE CARRID = F~CARRID
AND CONNID = F~CONNID
AND CITYFROM = 'FRANKFURT'
AND CITYTO = 'NEW YORK' )
AND FLDATE BETWEEN '19990101' AND '19990331'.
ENDSELECT.Hi Charles,
It is not at all advised to use SELECT...ENDSELECT to fetch data from the database. It would reduce the performance.
Generally to achieve your query, I will do this.
SELECT * FROM SFLIGHT
INTO TABLE IT_SFLIGHT
WHERE SEATSOCC S_SEATSMAX
AND FLDATE BETWEEN '19990101' AND '20060331'.
IF SY-SUBRC = 0.
LOOP AT IT_SFLIGHT.
V_TABIX = SY-TABIX.
SELECT SINGLE * FROM SPFLI
INTO WA_SPFLI
WHERE CARRID = IT_SFLIGHT-CARRID
AND CONNID = IT_SFLIGHT-CONNID
AND CITYFROM = 'FRANKFRUIT'
AND CITYTO = 'NEW YORK'.
IF SY-SUBRC <> 0.
DELETE IT_SFLIGHT INDEX V_TABIX.
ENDIF.
ENDLOOP. " IT_SFLIGHT
ENDIF. " SFLIGHT
Thanks,
Sreekanth -
Hi,
can we do a for all entries with a table type parameter.
select * from <tablename> for all entries in <internal table> (importing parameter in an FM a table type parameter)....where <cond>go thrugh this and check dynamic select it may help you
<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/840ad679-0601-0010-cd8e-9989fd650822#q-16">https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/840ad679-0601-0010-cd8e-9989fd650822#q-16</a>
regards
shiba dutta -
Performance Problems with "For all Entries" and a big internal table
We have big Performance Problems with following Statement:
SELECT * FROM zeedmt_zmon INTO TABLE gt_zmon_help
FOR ALL ENTRIES IN gt_zmon_help
WHERE
status = 'IAI200' AND
logdat IN gs_dat AND
ztrack = gt_zmon_help-ztrack.
In the internal table gt_zmon_help are over 1000000 entries.
Anyone an Idea how to improve the Performance?
Thank you!>
Matthias Weisensel wrote:
> We have big Performance Problems with following Statement:
>
>
SELECT * FROM zeedmt_zmon INTO TABLE gt_zmon_help
> FOR ALL ENTRIES IN gt_zmon_help
> WHERE
> status = 'IAI200' AND
> logdat IN gs_dat AND
> ztrack = gt_zmon_help-ztrack.
>
> In the internal table gt_zmon_help are over 1000000 entries.
> Anyone an Idea how to improve the Performance?
>
> Thank you!
You can't expect miracles. With over a million entries in your itab any select is going to take a bit of time. Do you really need all these records in the itab? How many records is the select bringing back? I'm assuming that you have got and are using indexes on your ZEEDMT_ZMON table.
In this situation, I'd first of all try to think of another way of running the query and restricting the amount of data, but if this were not possible I'd just run it in the background and accept that it is going to take a long time. -
Using for all entries of two internal tables in where clause of the select
Hi experts,
My requirement is, need to select Marc-minbe and wrpl-sobst, for all the entries of the two internal tables it_mara , and it_t001w.
here is the select queries i have used,
select matnr normt from mara into it_mara for all entries in it_data where normt = it_data-normt.
select konnr werks from t001w into it_t001w for all entries in it_data where konnr = it_data-konnr.
now i need to select minbe of marc table and sobse of wrpl table for all the entries of above internal tables, it_mara and it_t001w, using both matnr of it_mara and werks of it_t001w in where condition.
Pls advise how i can do it.
Thanks.
Moderator message: very basic, please work on this yourself first, these forums are not a substitute for ABAP training.
Edited by: Thomas Zloch on Dec 6, 2010 9:38 AMHi
call SE16 with table TFTIT in order to get a full list (it will be long...)
A list of FMs with parameters can be found in table FUNCT.
Finally go to sm37rsdf4
that will give you all the function modules with description
Here is the list:
http://www.erpgenie.com/abap/functions.htm
hope this helps...
Regards
CSM Reddy
Maybe you are looking for
-
How do you get drum loops tempo to match your track?
We've recorded a few different projects with acoustic guitar tracks and are having trouble getting the drum loops to match the beat/tempo of our tracks. Even with Groove Matching, it still sounds a little bit off. Any suggestions?
-
Change width of fields displayed on PDF from ALV
Hello, I have a requirement in which i have to print an alv report in a pdf , now in the report say there are 11 fields of which 5 are hidden , so when i print the report in pdf , in the pdf output the entire width of the page is not occupied but onl
-
4 of us on 1 Apple ID/icloud acct. How do I create 3 new ID's?
We have 4 members of our family on one Apple ID, and sharing one Cloud acct. How do I create 3 new ID's? Our cloud acct is full, and we need our own space! :-)
-
How do I share information between my Asus laptop and my Ipad?
I have an Asus laptop with Windows 8 and I am trying to have information that I have saved on my Ipad for business to be automatically sent to my laptop and vice versa. Is that possible?
-
A way to copy the list of URL's in "Show All History"?
Sometimes I want to make a copy of the websites I've been to during a particular session. Although the URL's are clearly shown on the 'Show All History' screen, I'm not aware of any way to select them 'as text' -- e.g., so that I can then copy-and-pa