Read statement with duplicate key fields
Hello,
I have an internal table(EKBE) with 8 fields
ebeln ebelp vgabe gjahr belnr budat wrbtr refkey
populating the first 7 fields from EKBE table with VGABE = 2 and PO#, concatenating the WRBTR and GJAHR to get the Refkey and passing this to the 8th field.
Using this refkey, getting the document numbers from BKPF.
I am looping another internal table into a work area and reading the above internal table by passing the ebeln field and I am doing some calculations ,etc.
A custom table is getting updated from the above work area.
The issue is-
The internal table EKBE can have the same PO numbers with the same line item numbers but with different ref key's.
So, when I am reading the int. tab, it is reading only one record, since I have no other key's to read except EBELN. So for one PO# it is reading only 1 ref key, I cannot use the line item# as a key, as the line item#'s never match, even if they match they could be same PO# with same line item# and different ref key.
Any inputs highly appreciated.
Regards,
Kiran
Loop on EKBE Internal table as well to fetch all entries of PO. Use Parallel cursor to optmize performance.
http://wiki.sdn.sap.com/wiki/display/Snippets/ABAPCodeforParallelCursor-Loop+Processing
Similar Messages
-
Read statement with repeated key field
Hi Experts ,
We are in the process of UCCHECK in an upgrade program and come across an issue with read statement using repeated key fields which is not allowed in a unicode compatable environment.
READ TABLE it_vbpa WITH KEY
vbeln = l_vbeln
parvw = '0'
parvw = 'ZN'.
I checked this in 4.6c environment and observed that the Read statement uses the last key value for reading and doesnt consider other values even if the last value is not present in the table .
I want to know if I can use only that last value for read statement ? If so, what was the use of the repeated key fields in a read statement?
Thanks and Regards
SanuHi,
Your main aim in a upgrade would be to successfully replicate the 4.6x functionalities in the ECC 6 version with the unicode checks. So it would be a safe option to only consider the last key condition. I dont have access to a 4.6C environment. May be it was a mistake corrected by SAP in the new version.
Vikranth -
How to use Read table with out key fields
Hi Experts,
I need to retrieve the 2 internal tables data into single table.
I have 3 common fields between the 2 tables but I don't have the Key fields. Then how to use the read table in this.
Thanks in Advance.
Edited by: satish4abap on Mar 10, 2010 9:39 AMHi Satish,
Key fields are nothing but the common fields with which you can pick the data from the second internal table.
If you can paste your Internal table fields then we will be able to assit you better.
However, in genral scenarios you can use it as below :
In this scenario, we are putting data from 3 internal table to another single internal table.
LOOP AT T_PRGEN INTO WA_PRGEN.
WA_FINAL-GUID_PR = WA_PRGEN-GUID_PR.
WA_FINAL-ATTR20A = WA_PRGEN-ATTR20A.
WA_FINAL-ATTR05A = WA_PRGEN-ATTR05A.
WA_FINAL-ATTR05B = WA_PRGEN-ATTR05B.
WA_FINAL-ATTR05C = WA_PRGEN-ATTR05C. " + DG1K902190
WA_FINAL-ATTR10A = WA_PRGEN-ATTR10A.
READ TABLE T_V_TCAV201 INTO WA_V_TCAV201 WITH KEY ATTRV20 = WA_PRGEN-ATTR20A BINARY SEARCH.
IF SY-SUBRC = 0.
WA_FINAL-TEXT1 = WA_V_TCAV201-TEXT1. "SUBID-TEXT1
ENDIF.
READ TABLE T_PNTPR INTO WA_PNTPR WITH KEY GUID_PR = WA_PRGEN-GUID_PR BINARY SEARCH.
IF SY-SUBRC = 0.
WA_FINAL-PRVSY = WA_PNTPR-PRVSY. "PROD NO
WA_FINAL-GRVSY = WA_PNTPR-GRVSY. "LOGICAL SYS GROUP
ENDIF.
append wa_final to t_final.
endloop. -
Read Statement with Single key with multiple values
Dear Friends,
In ECC 4.6c, I wrote statement like this.
Read table message with key type = 'E' or 'S'.
if sy-subrc = 0.
Populated the message log to output internal table.
endif.
But when i transported to QA which is ECC 6.0, it is giving error.
Can any one help me in modifying this qurey.
Plse read my question thoroughly and reply me back.
Regards,
Santosh Kumar MHi,
You can't use OR condition with READ table. it is always AND condition.
Here 2 ways for ur problem.
If u want to have just one message in the log then use multiple reads.
READ TABLE message WITH KEY type = 'E'.
If sy-subrc IS INITIAL.
populate log.
ELSE.
READ TABLE message WITH KEY type = 'S'.
If sy-subrc IS INITIAL.
populate log.
ENDIF.
ENDIF.
If u want all messages then u have to loop through and populate the log as sugested by Vijay but
Without exit in loop.(Since u need all the messages)
LOOP AT message into wa WHERE type = 'E' or type = 'S'.
populate log.
ENDLOOP.
Thanks,
Vinod. -
READ statement with dynamic key
Can i READ a dynamic table with a dynamic key combination?
READ TABLE <dyn_sel_table>
INTO <dyn_sel_wa>
WITH KEY ? .yes i guess u can do it
READ TABLE <dyn_sel_table>
<b>ASSIGNING</b> <dyn_sel_wa>
WITH KEY <field1> eq ... -
Optimal read write performance for data with duplicate keys
Hi,
I am constructing a database that will store data with duplicate keys.
For each key (a String) there will be multiple data objects, there is no upper limit to the number of data objects, but let's say there could be a million.
Data objects have a time-stamp (Long) field and a message (String) field.
At the moment I write these data objects into the database in chronological order, as i receive them, for any given key.
When I retrieve data for a key, and iterate across the duplicates for any given primary key using a cursor they are fetched in ascending chronological order.
What I would like to do is start fetching these records in reverse order, say just the last 10 records that were written to the database for a given key, and was wondering if anyone had some suggestions on the optimal way to do this.
I have considered writing data out in the order that i want to retrieve it, by supplying the database with a custom duplicate comparator. If I were to do this then the query above would return the latest data first, and I would be able to iterate over the most recent inserts quickly. but Is there a performance penalty paid on writing to the database if I do this?
I have also considered using the time-stamp field as the unique primary key for the primary database instead of the String, and creating a secondary database for the String, this would allow me to index into the data using a cursor join, but I'm not certain it would be any more performant, at least not on writing to the database, since it would result in a very flat b-tree.
Is there a fundamental choice that I will have to make between write versus read performance? Any suggestions on tackling this much appreciated.
Many Thanks,
JoelHi Joel,
Using a duplicate comparator will slow down Btree access (writes and reads) to
some degree because the comparator is called a lot during searching. But
whether this is a problem depends on whether your app is CPU bound and how much
CPU time your comparator uses. If you can avoid de-serializing the object in
the comparator, that will help. For example, if you keep the timestamp at the
beginning of the data and only read the one long timestamp field in your
comparator, that should be pretty fast.
Another approach is to store the negation of the timestamp so that records
are sorted naturally in reverse timestamp order.
Another approach is to read backwards using a cursor. This takes a couple
steps:
1) Find the last duplicate for the primary key you're interested in:
cursor.getSearchKey(keyOfInterest, ...)
status = cursor.getNextNoDup(...)
if (status == SUCCESS) {
// Found the next primary key, now back up one record.
status = cursor.getPrev(...)
} else {
// This is the last primary key, find the last record.
status = cursor.getLast(...)
}2) Scan backwards over the duplicates:
while (status == SUCCESS) {
// Process one record
// Move backwards
status = cursor.getPrev(...)
}Finally another approach is to use a two-part primary key: {string,timestamp}.
Duplicates are not configured because every key is unique. I mention this
because using duplicates in JE has more overhead than using a unique primary
key. You can combine this with either of the above approaches -- using a
comparator, negating the timestamp, or scanning backwards.
--mark -
Multiple entries in a Z table with same key fields
Hi
I do have a ZTABLE, with 3 key fields defined earlier. It consists of around 1 lakh records. Later onwards, two of the non keyfields have been made to key fields.
This table is being populated with records at the time of saving a ztransaction.
But some times, the system is updating the same records, some times twice, sometimes thrice, etc. I got to know that all fields (both key fields and non-key fields) of the record are same. That is, records are being updated in to the database table n number of times may be depending of some false logic in the program.
If I tried to enter the same using SM30, it is showing me an error message stating that the record is already existing.
What can be the reson?Hi,
It seems there is some kind of data inconsistency..try to get all the records and then delete the duplicate entries through program....Now once u r done , from now onwards there won't be any duplicate entiers.,also before updating table use filters to avoid the duplication..
Regards,
Nagaraj -
READ statement with binary search
Hi friends,
I know that while using the READ statement that we have to sort data and use BINARY SEARCH for faster search.
I have a situation
following are internal table contents
belnr agent action
9000001 name1 BRW
9000001 name1 API
when i use READ statement with where condition ( ( belnr - 9000001 ) and ( action = 'BRW' ) ) with binary search then the SY_SUBRC value is 4.
if i remove the binary search then its giving SY-SUBRC value 0.
Can anybody explain why BINARY SEARCH fails.
Points will be rewarded for correct answers.
Thanks and regards,
Murthytry this i am not getting sy-subrc 4
TYPES:BEGIN OF TY_ITAB,
BELNR TYPE BELNR,
AGENT(30),
ACTION(5),
END OF TY_ITAB.
DATA:IT_TAB TYPE TABLE OF TY_ITAB,
WA_TAB TYPE TY_ITAB.
WA_TAB-BELNR = 9000001.
WA_TAB-AGENT = 'name1'.
WA_TAB-ACTION = 'BRW'.
APPEND WA_TAB TO IT_TAB.
CLEAR WA_TAB.
WA_TAB-BELNR = 9000002.
WA_TAB-AGENT = 'name 2'.
WA_TAB-ACTION = 'API'.
APPEND WA_TAB TO IT_TAB.
loop at it_tab into wa_tab.
read table it_tab into wa_tab with key belnr = wa_tab-belnr binary search .
write: sy-subrc, wa_tab-agent.
endloop. -
JPA - How to map relation with NON-KEY field.
Hello.
Problem with mapping is NullPointerException when calling EntityManager em.createNativeQuery:
Table1 (Bm_Treeassoc):
MY_ID (Primary Key)
BOOKMARKID (-> MY_ID in Table2)
Text
Table2 (Bm_Bookmark):
MY_ID ( Primary Key)
Text
//CLASS BmTreeassoc
@OneToMany(targetEntity=BmBookmark.class, mappedBy="treeMaster", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private BmTreeassoc treeMaster = null ;
//CLASS BmBookmark
@ManyToOne(targetEntity=BmTreeassoc.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = true)
@JoinColumn(name="MY_ID", referencedColumnName="BOOKMARKID", unique=true)
private ArrayList<BmBookmark> bookmarks = new ArrayList<BmBookmark>() ;
This Leads to the exception.
Mapping form MY_ID to MY_ID instead BOOKMARKID will not throw the exception,
so I assume I have a problem with the KEY Field?
Any ideas?
Kind regards
FrankOK,
after reflecting (after maniacally trying for days).
Here is the answer by myself:
I do not use the mapping stuff at all no more.
I solved my join by using a view:
CREATE VIEW SAPDEMO.VTree
AS SELECT t.TreeID, b.MY_ID, b.CLIENTID, b.Nickname, u.URL
FROM SAPDEMO.BM_TreeAssoc as t
JOIN SAPDEMO.BM_BOOKMARK as B ON t.BookmarkID = b.MY_ID
JOIN SAPDEMO.BM_URL as U ON b.URL = u.MY_ID
Create the entity and then do a:
select * from VTREE where clientid=1 and treeid=446
Works great, simple, fast. -
Sender file adapter Adapter with out Key field
Hi All
i do have have a requirment ,Sender file adapter , for FCC but file is with out Key field
HEADER>
<DATA1>
<DATA2>
<DATA3>
<HEADER> file structure
<ITEM>
<ITEM1>
<ITEM2>
<ITEM3>
<ITEM
and the file si
'10001,20081902,US
10,soda,1
30,soda,4
40,soda,5
10002,20081902,US
10,steel,1
30,steel,4
40,steel,5
, and i need to identify the Header and Item using there lenght only , please anyone as idea abt this help meWhy to post the same question TWICE... in 30 min ? you don't like the answers ?
File content Conversion Issuse for a Sender File Adapter -
Can we create table maintence generator with out key field
Hi,
I have created a ztable in that client is the primary key as I don't want any other field as primary key.
For this i have created table maintenace generator but when i open it in sm30 blnak screen is coming.
Here my question is can we create a table maintenace generator with out key field other than MANDT.
If it's possible please let me know.
Regards
hari>
Mathews Joseph wrote:
> I agree to the above points , but you can try one thing.
>
> When you create the table maintenance screen , from SE11 you assign a function group.
>
> Double click on the function group and you can go to the main program and open that in SE80, take screen generated and try manually adjusting the screen and putting the non key field details...
>
> Not sure this will work , but may be you can give it a try.
>
> Mathews
But the table could hold at most a single record (per client). The design is lacking.
Rob -
How to read from an internal table with multiple key fields.
Hi All!!
I want to read from an internal table having keys as k1,k2,k3.
How can I use read statement to read an entry having this as the key fields.
Thanks in adavance..
Prabhas Jhahi there
use:
sort itab by K1 K2 K3.
read table itab into wa with key K1 = value 1
K2 = value2
K3 = value 3
BINARY SEARCH.
where:
itab is ur internal table
wa is the work area with the same line type as the itab
cheers
shivika -
Issue with read statement with one more key missing in mapping
Hi All ,
I have such data in two internals table :
IT_bdc
vbeln posnr
90000593 10
90000576 10
90000672 10
90000672 20
90000672 30
it_konv
kbetr vbeln
6250 90000576
12160000 90000593
500000 90000672
600000 90000672
700000 90000672
My current program statement is :
LOOP AT it_bdc.
READ TABLE it_konv WITH KEY
vbeln = it_bdocs-vbeln.
currency = it_konv-waers.
endloop.
as you can see the posnr is missing in it_konv how can i modify this read statement so
that vbeln posnr from it_bdc should get correct kbetr from it_konv.
Kindly help in this mapping.Hi
sort it_konv by vbeln
then
loop at it_bdc.
read table it_konv with key vbeln = it_bdc-vbeln binary search.
if sy-subrc = 0.
perform your logic/task.
endif.
endloop.
also it depends what you want to do after reading it_konv.
in my logic if there is a vbeln in it_konv which s present in it_bdc then sy-subrc will be 0
and you can perform your logic.
and if there will be no matching vbeln in it_konv then sy-subrc will not be 0.
check the values in debugging.
Thanks
Lalit -
Read statement with key syntax
Hi all,
In read statement, is there a possibility to use 'contains string (CS)' instead of '=' in with key?
I have a requirement to fetch from an internal table, the record whose field1 value contains a particular string.
Thanks,
David.HI
it won't accept CS in read table clause. syntax error will be displayed.
for more clarity just execute the falloing code.
DATA: BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR,
ERSDA LIKE MARA-ERSDA,
ERNAM LIKE MARA-ERNAM,
END OF ITAB.
SELECT MATNR
ERSDA
ERNAM
FROM MARA
INTO TABLE ITAB
WHERE ERNAM = 'BOHNSTEDT'.
IF SY-SUBRC EQ 0.
SORT ITAB BY MATNR ASCENDING.
READ TABLE ITAB WITH KEY MATNR CS '3'.
IF SY-SUBRC EQ 0.
WRITE: ITAB.
ENDIF.
ENDIF. -
Reading data from BSEG table with Non-key fields in where clause
Hi All,
I have to read data from BSEG table based on WBS element field (PROJK). As I'm not passing key fields to WHERE clause system couldnt run the select statement. Since BSEG is a cluster table I cant even create secondary index on PROJK field.
Could you please tell me, how to improve its performance.
Regards
Jaker.SELECT bukrs
belnr
gjahr
shkzg
dmbtr
hkont
lifnr
matnr
werks
menge
meins
ebeln
FROM bseg
INTO TABLE it_bseg
PACKAGE SIZE 10
FOR ALL ENTRIES IN it_final
WHERE bukrs EQ it_final-bukrs
AND belnr EQ it_final-belnr
AND gjahr EQ it_final-gjahr
AND buzei EQ it_final-buzei
AND hkont EQ it_final-hkont
AND werks IN s_werks.
By using package and fetch from BSEG table. gathering all other information to a final internal table.This will reduce the hit to database.And also try to put that data in hashed internal table which is it_bseg....then definetly improve the performance.
<REMOVED BY MODERATOR>
Dara.
Edited by: Alvaro Tejada Galindo on Apr 21, 2008 12:47 PM
Maybe you are looking for
-
"Sender Name is Invalid" (can't send email from POP account) iPhone 2.1
I updated from V2.0.2 to V2.1 today. I also swapped out my original iPhone EDGE for a new iPhone EDGE due to unrelated problems with the speaker. Upon testing things after restoring from backup to the new phone I discovered that I could no longer SEN
-
Why can I not create a PDF from a web page on my Adobe Acrobat 8 Pro on my new Windows 8 computer? It worked fine on my windows XP system?
-
iphone 4s not getting detected in macbook after connecting via usb cable, also photos taken in iPhone not showing in macbook pro
-
New tools in /usr./sap/put/exe do not connect to the database.
As per CHECKS LOG, In the Initialization phase. the new tools in /usr/sap/put/exe do not connect, Check environment settings or adapt language files. currently on a distributed env, with 4.6D kernel, oracle 10.2.02 client on CI Oracle 10.2.0.2 serve
-
BT NetProtect Plus Error message in event log - mf...
Hi, Anyonwe know why I am getting a warning in the system event log as follows "Process **\MCSHIELD.EXE pid (2588) contains signed but untrusted code, but was allowed to perform a privileged operation with a McAfee driver." Source: mfehidk Event I