Performance Issue on Select Condition on KNA1 table
Hi,
I am facing problem when i am selecting from the table KNA1 for given account group and attribute9 it is taking lot of time .
Please suggest the select query or any other feasible soln to solve this problem
select
kunnr
kotkd
from kna1
where kunnr eq parameter value and
kotkd eq 'ZPY' and katr9 = 'L' or 'T'.
Firstly i am using in in katr9 then i removed dur to performance issue using read further please suggest further performanace soln
Hi,
The select should be like:
select
kunnr
kotkd
from kna1
where kunnr eq parameter value
and kotkd eq 'ZPY'
and katr9 in r_katr9. " 'L' or 'T'.
create a range for katr9 like r_katr9 with L or T.
Because while selecting the entries from KNA1, it will check for KATR9 = L and then KATR9 = T.
Hope the above statement is useful for you.
Regards,
Shiva.
Similar Messages
-
Performance issues while query data from a table having large records
Hi all,
I have a performance issues on the queries on mtl_transaction_accounts table which has around 48,000,000 rows. One of the query is as below
SQL ID: 98pqcjwuhf0y6 Plan Hash: 3227911261
SELECT SUM (B.BASE_TRANSACTION_VALUE)
FROM
MTL_TRANSACTION_ACCOUNTS B , MTL_PARAMETERS A
WHERE A.ORGANIZATION_ID = B.ORGANIZATION_ID
AND A.ORGANIZATION_ID = :b1
AND B.REFERENCE_ACCOUNT = A.MATERIAL_ACCOUNT
AND B.TRANSACTION_DATE <= LAST_DAY (TO_DATE (:b2 , 'MON-YY' ) )
AND B.ACCOUNTING_LINE_TYPE != 15
call count cpu elapsed disk query current rows
Parse 1 0.00 0.00 0 0 0 0
Execute 3 0.02 0.05 0 0 0 0
Fetch 3 134.74 722.82 847951 1003824 0 2
total 7 134.76 722.87 847951 1003824 0 2
Misses in library cache during parse: 1
Misses in library cache during execute: 2
Optimizer mode: ALL_ROWS
Parsing user id: 193 (APPS)
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
1 1 1 SORT AGGREGATE (cr=469496 pr=397503 pw=0 time=237575841 us)
788242 788242 788242 NESTED LOOPS (cr=469496 pr=397503 pw=0 time=337519154 us cost=644 size=5920 card=160)
1 1 1 TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=59 us cost=1 size=10 card=1)
1 1 1 INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=40 us cost=0 size=0 card=1)(object id 181399)
788242 788242 788242 TABLE ACCESS BY INDEX ROWID MTL_TRANSACTION_ACCOUNTS (cr=469494 pr=397503 pw=0 time=336447304 us cost=643 size=4320 card=160)
8704356 8704356 8704356 INDEX RANGE SCAN MTL_TRANSACTION_ACCOUNTS_N3 (cr=28826 pr=28826 pw=0 time=27109752 us cost=28 size=0 card=7316)(object id 181802)
Rows Execution Plan
0 SELECT STATEMENT MODE: ALL_ROWS
1 SORT (AGGREGATE)
788242 NESTED LOOPS
1 TABLE ACCESS MODE: ANALYZED (BY INDEX ROWID) OF
'MTL_PARAMETERS' (TABLE)
1 INDEX MODE: ANALYZED (UNIQUE SCAN) OF
'MTL_PARAMETERS_U1' (INDEX (UNIQUE))
788242 TABLE ACCESS MODE: ANALYZED (BY INDEX ROWID) OF
'MTL_TRANSACTION_ACCOUNTS' (TABLE)
8704356 INDEX MODE: ANALYZED (RANGE SCAN) OF
'MTL_TRANSACTION_ACCOUNTS_N3' (INDEX)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
row cache lock 29 0.00 0.02
SQL*Net message to client 2 0.00 0.00
db file sequential read 847951 0.40 581.90
latch: object queue header operation 3 0.00 0.00
latch: gc element 14 0.00 0.00
gc cr grant 2-way 3 0.00 0.00
latch: gcs resource hash 1 0.00 0.00
SQL*Net message from client 2 0.00 0.00
gc current block 3-way 1 0.00 0.00
********************************************************************************On a 5 node rac environment the program completes in 15 hours whereas on a single node environemnt the program completes in 2 hours.
Is there any way I can improve the performance of this query?
Regards
Edited by: mhosur on Dec 10, 2012 2:41 AM
Edited by: mhosur on Dec 10, 2012 2:59 AM
Edited by: mhosur on Dec 11, 2012 10:32 PMCREATE INDEX mtl_transaction_accounts_n0
ON mtl_transaction_accounts (
transaction_date
, organization_id
, reference_account
, accounting_line_type
/:p -
Performance issue when selection LIPS table into program.
Hi expert,
I have created Pending sales order report , in that i am facing performance problem for selection of LIPS table.
i have tried to use VLPMA table but performance has not been improved so, is their any need to create secondary index and
if yes then which fields of lips table i have to includes in index.
Please reply.
Regards,
Jyotsna>
UmaDave wrote:
> Hi ,
> 1.Please make use of PACKAGE in your select query , it will definetly improve the performance.
> 2.Please use the primary index by passing the fields in where clause in the order in which they appera in LIPS table.
> 3.You can also create a secondary index with the fields which you are using in where clause of select query and maintain the fields in the same sequence (where clause and secondary index)
> 4.If there is any inner joins (more than 3) then reduce them and have few mare select queries for them and make use of for all entries.
>
> This will definitely improve the performance to great extend.
>
> Hope this is helpful.
> Regards,
> Uma
Please do some more research before offering advice:
PACKAGE SIZE is for memory management, not performance.
Creating a secondary index is using a hammer to swat a fly and the order in the SELECT is not relevant.
FAE does not improve performance over a JOIN.
Rob -
Performance issue while selecting material documents MKPF & MSEG
Hello,
I'm facing performance issues in production while selecting Material documents for Sales order and item based on the Sales order Stock.
Here is the query :
I'm first selecting data from ebew table which is the Sales order Stock table then this query.
IF ibew[] IS NOT INITIAL AND ignore_material_documents IS INITIAL.
* Select the Material documents created for the the sales orders.
SELECT mkpf~mblnr mkpf~budat
mseg~matnr mseg~mat_kdauf mseg~mat_kdpos mseg~shkzg
mseg~dmbtr mseg~menge
INTO CORRESPONDING FIELDS OF TABLE i_mseg
FROM mkpf INNER JOIN mseg
ON mkpf~mandt = mseg~mandt
AND mkpf~mblnr = mseg~mblnr
AND mkpf~mjahr = mseg~mjahr
FOR ALL entries IN ibew
WHERE mseg~matnr = ibew-matnr
AND mseg~werks = ibew-bwkey
AND mseg~mat_kdauf = ibew-vbeln
AND mseg~mat_kdpos = ibew-posnr.
SORT i_mseg BY mat_kdauf ASCENDING
mat_kdpos ASCENDING
budat DESCENDING.
ENDIF.
I need to select the material documents because the end users want to see the stock as on certain date for the sales orders and only material document lines can give this information. Also EBEW table gives Stock only for current date.
For Example :
If the report was run for Stock date 30th Sept 2008, but on the 5th Oct 2008, then I need to consider the goods movements after 30th Sept and add if stock was issued or subtract if stock was added.
I know there is an Index MSEG~M in database system on mseg, however I don't know the Storage location LGORT and Movement types BWART that should be considered, so I tried to use all the Storage locations and Movement types available in the system, but this caused the query to run even slower than before.
I could create an index for the fields mentioned in where clause , but it would be an overhead anyways.
Your help will be appreciated. Thanks in advance
regards,
AdvaitHi Thomas,
Thanks for your reply. the performance of the query has significantly improved than before after switching the join from mseg join mkpf.
Actually, I even tried without join and looped using field symbols ,this is working slightly faster than the switched join.
Here are the result , tried with 371 records as our sandbox doesn't have too many entries unfortunately ,
Results before switching the join 146036 microseconds
Results after swithing the join 38029 microseconds
Results w/o join 28068 microseconds for selection and 5725 microseconds for looping
Thanks again.
regards,
Advait -
[Urgent] Issue with Selected rows in Advanced table
[I have searched archive and found lots of mails on same issue but none were conclusive so i am asking this again]
Hi All,
I have created an advanced table and i want to have functionality of deleting selected rows.
For implementation of this functionality, i have created a selectflag transient attribute [varchar2] and linked it to multiple select item of Advanced table but the table always returns null for selectflag attribute irrespective of row being selected or not.
One thing i have noticed is that i can't supply 'checked value' and 'unchecked value' property in advanced table multiple select item. Is that the issue?
Can anybody please guide, its quite urgent.
Regards
LokeshHi Reetesh,
Thanks for the reply.
Yes, you are right i am using same AM at 2 different places.
Let me just elaborate a little about my implementation:
I have a Page layout region and within this page layout, i have a query bean which performs results based search.
Within this query bean, i have added an Advanced table within that query bean to display the results.
Now coming to multiple AM issue:
1. Page Layout region must have one AM or its an error.
2. If i donot add an AM to advanced table, it doesn't return rows.
So do i need to have 2 diferent AM's for this implementation?
Regards
Lokesh -
Performance issue with select query
Hi friends ,
This is my select query which is taking so much time to retrive the records.CAn Any one help me in solving this performance issue.
*- Get the Goods receipts mainly selected per period (=> MKPF secondary
SELECT msegebeln msegebelp mseg~werks
ekkobukrs ekkolifnr ekkozterm ekkoekorg ekko~ekgrp
ekkoinco1 ekkoexnum
lfa1name1 lfa1land1 lfa1ktokk lfa1stceg
mkpfmblnr mkpfmjahr msegzeile mkpfbldat mkpf~budat
mseg~bwart
*Start of changes for CIP 6203752 by PGOX02
mseg~smbln
*End of changes for CIP 6203752 by PGOX02
ekpomatnr ekpotxz01 ekpomenge ekpomeins
ekbemenge ekbedmbtr ekbewrbtr ekbewaers
ekpolgort ekpomatkl ekpowebaz ekpokonnr ekpo~ktpnr
ekpoplifz ekpobstae
INTO TABLE it_temp
FROM mkpf JOIN mseg ON msegmblnr EQ mkpfmblnr
AND msegmjahr EQ mkpfmjahr
JOIN ekbe ON ekbeebeln EQ msegebeln
AND ekbeebelp EQ msegebelp
AND ekbe~zekkn EQ '00'
AND ekbe~vgabe EQ '1'
AND ekbegjahr EQ msegmjahr
AND ekbebelnr EQ msegmblnr
AND ekbebuzei EQ msegzeile
JOIN ekpo ON ekpoebeln EQ ekbeebeln
AND ekpoebelp EQ ekbeebelp
JOIN ekko ON ekkoebeln EQ ekpoebeln
JOIN lfa1 ON lfa1lifnr EQ ekkolifnr
WHERE mkpf~budat IN so_budat
AND mkpf~bldat IN so_bldat
AND mkpf~vgart EQ 'WE'
AND mseg~bwart IN so_bwart
AND mseg~matnr IN so_matnr
AND mseg~werks IN so_werks
AND mseg~lifnr IN so_lifnr
AND mseg~ebeln IN so_ebeln
AND ekko~ekgrp IN so_ekgrp
AND ekko~bukrs IN so_bukrs
AND ekpo~matkl IN so_matkl
AND ekko~bstyp IN so_bstyp
AND ekpo~loekz EQ space
AND ekpo~plifz IN so_plifz.
Thanks & Regards,
Manoj Kumar .Thatha
Moderator message - Please see Please Read before Posting in the Performance and Tuning Forum before posting and please use code tags when posting code - post locked
Edited by: Rob Burbank on Feb 4, 2010 9:03 AMHi friends ,
This is my select query which is taking so much time to retrive the records.CAn Any one help me in solving this performance issue.
*- Get the Goods receipts mainly selected per period (=> MKPF secondary
SELECT msegebeln msegebelp mseg~werks
ekkobukrs ekkolifnr ekkozterm ekkoekorg ekko~ekgrp
ekkoinco1 ekkoexnum
lfa1name1 lfa1land1 lfa1ktokk lfa1stceg
mkpfmblnr mkpfmjahr msegzeile mkpfbldat mkpf~budat
mseg~bwart
*Start of changes for CIP 6203752 by PGOX02
mseg~smbln
*End of changes for CIP 6203752 by PGOX02
ekpomatnr ekpotxz01 ekpomenge ekpomeins
ekbemenge ekbedmbtr ekbewrbtr ekbewaers
ekpolgort ekpomatkl ekpowebaz ekpokonnr ekpo~ktpnr
ekpoplifz ekpobstae
INTO TABLE it_temp
FROM mkpf JOIN mseg ON msegmblnr EQ mkpfmblnr
AND msegmjahr EQ mkpfmjahr
JOIN ekbe ON ekbeebeln EQ msegebeln
AND ekbeebelp EQ msegebelp
AND ekbe~zekkn EQ '00'
AND ekbe~vgabe EQ '1'
AND ekbegjahr EQ msegmjahr
AND ekbebelnr EQ msegmblnr
AND ekbebuzei EQ msegzeile
JOIN ekpo ON ekpoebeln EQ ekbeebeln
AND ekpoebelp EQ ekbeebelp
JOIN ekko ON ekkoebeln EQ ekpoebeln
JOIN lfa1 ON lfa1lifnr EQ ekkolifnr
WHERE mkpf~budat IN so_budat
AND mkpf~bldat IN so_bldat
AND mkpf~vgart EQ 'WE'
AND mseg~bwart IN so_bwart
AND mseg~matnr IN so_matnr
AND mseg~werks IN so_werks
AND mseg~lifnr IN so_lifnr
AND mseg~ebeln IN so_ebeln
AND ekko~ekgrp IN so_ekgrp
AND ekko~bukrs IN so_bukrs
AND ekpo~matkl IN so_matkl
AND ekko~bstyp IN so_bstyp
AND ekpo~loekz EQ space
AND ekpo~plifz IN so_plifz.
Thanks & Regards,
Manoj Kumar .Thatha
Moderator message - Please see Please Read before Posting in the Performance and Tuning Forum before posting and please use code tags when posting code - post locked
Edited by: Rob Burbank on Feb 4, 2010 9:03 AM -
Regarding performance issue in SELECT - need suggestions
Moderator message - use a more informative subject in future - having two or more posts with the same subject isn't helpful
Hi All could you plese send me the alternative code for this select quesy:
form read_data_from_GIPD.
select * from zbacks_gipd
where failf = '2'
and recno in recno.
clear tab.
clear result_total. "reset the record counter
tab-werks = zbacks_gipd-WERKS. "plant
tab-aufnr = zbacks_gipd-AUFNR. "production order no.
tab-matnr = zbacks_gipd-MATNR. "material
tab-erdat = zbacks_gipd-BUDAT. "transaction date
tab-recno = zbacks_gipd-recno.
TAB-MENGE = zbacks_gipd-menge. "qty
TAB-USAFL = zbacks_gipd-usafl. "usage/consumption ind.
* TAB-EXPCD "Expenses code
TAB-SAKNR = zbacks_gipd-saknr. "G/L account number
TAB-IDNUM = zbacks_gipd-idnum. "BACKS identification no.
TAB-KUNNR = zbacks_gipd-kunnr. "Customer Number
TAB-USACD = zbacks_gipd-usacd. "usage code
TAB-ORDCD = zbacks_gipd-ordcd. "order code
TAB-LOSTY = zbacks_gipd-losty. "loss type
TAB-COTAX = zbacks_gipd-cotax. "consumption tax
TAB-MWSKZ = zbacks_gipd-mwskz. "tax code
tab-runum = zbacks_gipd-runum. "running number
tab-failf = zbacks_gipd-failf. "failure flag
tab-msgnr = zbacks_gipd-failf. "failure flag
tab-matdoc = zbacks_gipd-docm1. "material doc
* BEGIN OF SR#20293 WITH DEVK955638
* tab-msgtx = 'Repost 2nd step'.
tab-msgtx = 'Repost 2nd step'(057).
* END OF SR#20293 WITH DEVK955638
* tab-erdat_raw = tab-erdat. "keep the MM/DD/YYYY format
* CONCATENATE TAB-ERDAT+6(4) TAB-ERDAT+0(2) TAB-ERDAT+3(2)
* INTO TAB-ERDAT.
concatenate tab-erdat+4(2) '/'
tab-erdat+6(2) '/'
tab-erdat+0(4)
into tab-erdat_raw.
*Process only a particular set of usage indicator first
if tab-usafl = p_usafl.
APPEND TAB.
result_total = result_total + 1. "Increase the record counter
endif.
endselect.
* BEGIN OF SR#20293 WITH DEVK955638
* write: / 'Re-processing records for usage indicator', p_usafl.
write: / 'Re-processing records for usage indicator'(056), p_usafl.
* END OF SR#20293 WITH DEVK955638
endform.
Note : how can i avoid the select endselect statement , here he move data from database table to internal table .
Edited by: Julius Bussche on Jan 19, 2009 1:52 PM
Please use code tags
Edited by: Matt on Jan 19, 2009 4:46 PMHi,
Declare an Internal table with zbacks_gipd type,
Move the records into that table based on conditions,
Then loop that internal table, and fill tab internal table.
form read_data_from_GIPD.
Types : begin of ty_zbacks_gipd.
include structure zbacks_gipd.
Types : end of ty_zbacks_gipd.
Data : it_zbacks_gipd type table of ty_zbacks_gipd,
wa_zbacks_gipd type ty_zbacks_gipd.
select * from zbacks_gipd into table it_zbacks_gipd
where failf = '2'
and recno in recno.
loop at it_zbacks_gipd into wa_zbacks_gipd.
clear tab.
clear result_total. "reset the record counter
tab-werks = wa_zbacks_gipd-WERKS. "plant
tab-aufnr = wa_zbacks_gipd-AUFNR. "production order no.
tab-matnr = wa_zbacks_gipd-MATNR. "material
tab-erdat = wa_zbacks_gipd-BUDAT. "transaction date
tab-recno = wa_zbacks_gipd-recno.
TAB-MENGE = wa_zbacks_gipd-menge. "qty
TAB-USAFL = wa_zbacks_gipd-usafl. "usage/consumption ind.
* TAB-EXPCD "Expenses code
TAB-SAKNR = wa_zbacks_gipd-saknr. "G/L account number
TAB-IDNUM = wa_zbacks_gipd-idnum. "BACKS identification no.
TAB-KUNNR = wa_zbacks_gipd-kunnr. "Customer Number
TAB-USACD = wa_zbacks_gipd-usacd. "usage code
TAB-ORDCD = wa_zbacks_gipd-ordcd. "order code
TAB-LOSTY = wa_zbacks_gipd-losty. "loss type
TAB-COTAX = wa_zbacks_gipd-cotax. "consumption tax
TAB-MWSKZ = wa_zbacks_gipd-mwskz. "tax code
tab-runum = wa_zbacks_gipd-runum. "running number
tab-failf = wa_zbacks_gipd-failf. "failure flag
tab-msgnr = wa_zbacks_gipd-failf. "failure flag
tab-matdoc = wa_zbacks_gipd-docm1. "material doc
* BEGIN OF SR#20293 WITH DEVK955638
* tab-msgtx = 'Repost 2nd step'.
tab-msgtx = 'Repost 2nd step'(057).
* END OF SR#20293 WITH DEVK955638
* tab-erdat_raw = tab-erdat. "keep the MM/DD/YYYY format
* CONCATENATE TAB-ERDAT+6(4) TAB-ERDAT+0(2) TAB-ERDAT+3(2)
* INTO TAB-ERDAT.
concatenate tab-erdat+4(2) '/'
tab-erdat+6(2) '/'
tab-erdat+0(4)
into tab-erdat_raw.
*Process only a particular set of usage indicator first
if tab-usafl = p_usafl.
APPEND TAB.
result_total = result_total + 1. "Increase the record counter
endif.
endloop.
endform.
Regards
Bala Krishna
Edited by: Bala Krishna on Jan 19, 2009 6:48 PM -
Performance issue in select when subselect is used
We have a select statement that is using a where clause that has dates in. I've simplified the SQL below to demonstrate roughly what it does:
select * from user_activity
where starttime >= trunc(sysdate - 1) + 18/24
and starttime < trunc(sysdate) + 18/24
(this selects records from a table where a starttime field has values beween 6pm today and 6pm yesterday).
We are using this statement to create a materialized view which we refresh daily. Occasionally we have the need to refresh the data for a historic day, which means that we need to go in and change the where lines, e.g. to get data from 3 days ago instead of yesterday, the where clause becomes:
select * from user_activity
where starttime >= trunc(sysdate - 3) + 18/24
and starttime < trunc(sysdate - 2) + 18/24
Having to recreate the views like this is a nuisance, so we decided to be 'smart' and create a table with a setting in that we could use to control the number of days the view looks back. So if our table is called days_ago and field called days (with a single record, set to 1), we now have
select * from user_activity
where starttime >= trunc(sysdate - (select days from days_ago) + 18/24
and starttime < trunc(sysdate - ((select days from days_ago) + 1) + 18/24
The original SQL takes a few seconds to run. However the 'improved' version takes 25 minutes.
The days table only has 1 record in, selecting directly from it is instantaneous. Running the select on its own.
Does anything jump out as being daft in this approach? We cannot explain why the performance has suddenly dropped off for such a simple change.Hi,
Do you really need a view to do this?
Can't you define a bind varibale, and use it in your query:
VARIABLE days_ago NUMBER
EXEC :days_ago := 3;
SELECT ...
WHERE starttime >= TRUNC (SYSDATE - :days_ago') + (18 / 24)
AND starttime < TRUNC (SYSDATE - :days_ago') + (42 / 24) -- 42 = 24 + 18If you really must have a view, then it might be faster if you got the parameter from a SYS_CONTEXT variable, rather than from a table.
Unfortunately, SYS_CONTEXT always returns a string, so you have to be carefule encoding the number as a string when you set the variable, and decoding it when you use the variable:
WHERE starttime >= TRUNC (SYSDATE - TO_NUMBER ( SYS_CONTEXT ('MY_VIEW_NAMESPACE', 'DAYS_AGO'))) + (18 / 24)
AND starttime < TRUNC (SYSDATE - TO_NUMBER ( SYS_CONTEXT ('MY_VIEW_NAMESPACE', 'DAYS_AGO'))) + (42 / 24) -- 42 = 24 + 18For more about SYS_CONTEXT, look it up in the SQL language m,anual, and follow the links there:
http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions172.htm#sthref2268
If performance is important enough, consider storing the "fiscal day" as a separate (indexed) column. Starting in Oracle 11.1, you can use a virtual column for this. In earleir versions, you'd have to use a trigger. By "fiscal day", I mean:
TRUNC (starttime + (6/24))If starttime is between 18:00:00 on December 28 and 17:59:59 on December 29, this will return 00:00:00 on December 29. You could use it in a query (or view) like this:
WHERE fiscal_day = TRUNC (SYSDATE) - 2 -
Performance Issue with Selection Screen Values
Hi,
I am facing a performance issue(seems like a performance issue ) in my project.
I have a query with some RKFs and sales area in filters (single value variable which is optional).
Query is by default restricted by current month.
The Cube on which the query operates has around 400,000 records for a month.
The Cube gets loaded every three hours
When I run the query with no filters I get the output within 10~15 secs.
The issue I am facing is that, when I enter a sales area in my selection screen the query gets stuck in the data selection step. In fact we are facing the same problem if we use one or two other characteristics in our selection screen
We have aggregates/indexes etc on our cube.
Has any one faced a similar situation?
Does any one have any comments on this ?
Your help will be appreciated. ThanksHi A R,
Goto RSRT--> Give ur query anme --> Execute =Debug
--> No a pop up ill come with many check boxes select "Display Aggregates found" option --> now give ur
selections in variable screen > first it will give the already existing aggregate names> continue> now after displaying all the aggregates it will display the list of objects realted to cube wise> try to copy these objects into notepad> again go with ur drill downs now u'll get the already existing aggregates for this drill down-> it will display the list of objects> copy them to notepad> now sort all the objects related to one cube by deleting duplicate objects in the note pad>goto that Infocube> context>maintain aggregates> create aggregate on the objects u copied into note pad.
now try to execyte the report... it should work properly with out delays for those selections.
I hope it helps you...
Regards,
Ramki. -
Select name1 frm kna1 table on basis of customer number
hi below is my PAI code
my requiremnt is to select name1 field from kna1 table where
kan1-kunnr = t_ZCUST_EM_create-ship_to
where to code it pls suggest and how it will be displayed in the screen 200 ie when user press enter the name1 should automatically populate and display on the screen...
PROCESS AFTER INPUT.
MODULE CANCEL_200 AT EXIT-COMMAND.
LOOP WITH CONTROL TABLE_ZCUST_EM_CREATE ."AT T_AIMS_OPN_CREATE ." .".
MODULE USER_COMMAND_0200.
CHAIN.
FIELD t_ZCUST_EM_create-ship_to .
MODULE set_field_validation ON CHAIN-REQUEST.hi anji
here is my code i ahve written in PAI event but facing problem that whne i save entering the third firled in table zcustemal which has ship_to ship to name
and email id, kunnr is matched against kna1 table and eror msg comes if the kunnr in not in kna1 table it is working ok
now also name 1 is being populated in the field in the screen as per my code
but problem is
1) when just typing kunnr and email id ( and press save without enter the data for all three is saved ie kunnr name1 ( which is selected from table kna1) and e mail id
2) but whne i press enter after entering kunnr number on screen and then enter email id an dsave email id is not saved only kunnr and name1 is saved pls suggest
where should i code dont know pls suggest??????
CODe in screen
PROCESS BEFORE OUTPUT.
LOOP WITH CONTROL TABLE_ZCUST_EM_CREATE."AT T_ZCUST_EM_CREATE
MODULE STATUS_0200.
ENDLOOP.
*Process after input
PROCESS AFTER INPUT.
MODULE CANCEL_200 AT EXIT-COMMAND.
LOOP WITH CONTROL TABLE_ZCUST_EM_CREATE ."AT T_zcust_em_CREATE ." .".
CHAIN.
FIELD t_ZCUST_EM_create-ship_to .
MODULE set_field_validation ON CHAIN-REQUEST.
ENDCHAIN.
MODULE USER_COMMAND_0200.
ENDLOOP.
module read_table_value_0200.
<b>MODULE set_field_validation INPUT.</b>
nv added for three email id and ship_to name
select single * from zcustemail where ship_to eq
t_zcust_em_create-ship_to
and ship_to_name = t_zcust_em_create-ship_to_name
and email_id = t_zcust_em_create-email_id.
if sy-subrc eq 0.
t_gui1-fcode = 'BACK'.
append t_gui1.
t_gui1-fcode = 'EXIT'.
append t_gui1.
t_gui1-fcode = 'SAVE'.
append t_gui1.
SET PF-STATUS 'AIMS_200' excluding t_gui1.
message e001 with 'Record already Exists in Zcusteamil'(001).
else.
*nv
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = t_zcust_em_create-ship_to
IMPORTING
OUTPUT = t_zcust_em_create-ship_to.
select single kunnr from kna1 into v_kunnr
where kunnr = t_zcust_em_create-ship_to.
if sy-subrc = 0.
select single name1 from kna1 into t_zcust_em_create-ship_to_name
where kunnr = t_zcust_em_create-ship_to.
SET PF-STATUS 'AIMS_200'.
else.
message E001 with 'customer number does not exists'.
endif.
*nv
endif.
ENDMODULE. " set_field_validation INPUT
*Setting it for select/deselect entries
move:t_zcust_em_create to t_zcust_em_create_sel.
append t_zcust_em_create_sel.
clear:t_zcust_em_create_sel.
*Getting internal table t_zcust_em_create with control
read table t_zcust_em_create
with key ship_to = t_zcust_em_create-ship_to.
*Getting internal table for create entries: screen-200
if sy-subrc ne 0 and t_zcust_em_create-ship_to ne space .
append t_zcust_em_create .
move:t_zcust_em_create to t_zcust_em_create_tmp.
append t_zcust_em_create_tmp .
clear:t_zcust_em_create_tmp ,
t_zcust_em_create .
endif.
clear:t_cols.
*Getting the value of w_fill_200.
describe table t_zcust_em_create lines w_fill_200. -
Performance issue with selection of line items.
Hi All.
I am facing seriour Time_Out error problem for my program. Actually i am developing RFC and i have to send data to non sap system as it is in sap tables. Now i have to send data for BSIS for new entries for a day. SO first i search BELNR for CPUDT in BKPF and then use for all entries on BSIS. But now my problem is for a single day i am getting 1679 documents from BKPF and when i use for all entries in BSIS, it will give time out error.
my code is like
SELECT BUKRS BELNR GJAHR
FROM BKPF INTO CORRESPONDING FIELDS OF TABLE I_BKPF
WHERE CPUDT IN S_CPUDT.
if i_bkpf[] is not initial.
SELECT * FROM BSIS INTO TABLE I_BSIS
FOR ALL ENTRIES IN I_BKPF
WHERE BUKRS = I_BKPF-BUKRS
BELNR = I_BKPF-BELNR
GJAHR = I_BKPF-GJAHR.
endif.
So please gurus help me ..its urgent..Instead of writing Select * write Select "Fields names" then try might be it will solve ur problem.
Reward points is helpfull -
Performance issue in selecting data from a view because of not in condition
Hi experts,
I have a requirement to select data in a view which is not available in a fact with certain join conditions. but the fact table contains 2 crore rows of data. so this view is not working at all. it is running for long time. im pasting query here. please help me to tune it. whole query except prior to not in is executing in 15 minutes. but when i add not in condition it is running for so many hours as the second table has millions of records.
CREATE OR REPLACE FORCE VIEW EDWOWN.MEDW_V_GIEA_SERVICE_LEVEL11
SYS_ENT_ID,
SERVICE_LEVEL_NO,
CUSTOMER_NO,
BILL_TO_LOCATION,
PART_NO,
SRCE_SYS_ID,
BUS_AREA_ID,
CONTRACT,
WAREHOUSE,
ORDER_NO,
LINE_NO,
REL_NO,
REVISED_DUE_DATE,
REVISED_QTY_DUE,
QTY_RESERVED,
QTY_PICKED,
QTY_SHIPPED,
ABBREVIATION,
ACCT_WEEK,
ACCT_MONTH,
ACCT_YEAR,
UPDATED_FLAG,
CREATE_DATE,
RECORD_DATE,
BASE_WAREHOUSE,
EARLIEST_SHIP_DATE,
LATEST_SHIP_DATE,
SERVICE_DATE,
SHIP_PCT,
ALLOC_PCT,
WHSE_PCT,
ABC_CLASS,
LOCATION_ID,
RELEASE_COMP,
WAREHOUSE_DESC,
MAKE_TO_FLAG,
SOURCE_CREATE_DATE,
SOURCE_UPDATE_DATE,
SOURCE_CREATED_BY,
SOURCE_UPDATED_BY,
ENTITY_CODE,
RECORD_ID,
SRC_SYS_ENT_ID,
BSS_HIERARCHY_KEY,
SERVICE_LVL_FLAG
AS
SELECT SL.SYS_ENT_ID,
SL.ENTITY_CODE
|| '-'
|| SL.order_no
|| '-'
|| SL.LINE_NO
|| '-'
|| SL.REL_NO
SERVICE_LEVEL_NO,
SL.CUSTOMER_NO,
SL.BILL_TO_LOCATION,
SL.PART_NO,
SL.SRCE_SYS_ID,
SL.BUS_AREA_ID,
SL.CONTRACT,
SL.WAREHOUSE,
SL.ORDER_NO,
SL.LINE_NO,
SL.REL_NO,
SL.REVISED_DUE_DATE,
SL.REVISED_QTY_DUE,
NULL QTY_RESERVED,
NULL QTY_PICKED,
SL.QTY_SHIPPED,
SL.ABBREVIATION,
NULL ACCT_WEEK,
NULL ACCT_MONTH,
NULL ACCT_YEAR,
NULL UPDATED_FLAG,
SL.CREATE_DATE,
SL.RECORD_DATE,
SL.BASE_WAREHOUSE,
SL.EARLIEST_SHIP_DATE,
SL.LATEST_SHIP_DATE,
SL.SERVICE_DATE,
SL.SHIP_PCT,
0 ALLOC_PCT,
0 WHSE_PCT,
SL.ABC_CLASS,
SL.LOCATION_ID,
NULL RELEASE_COMP,
SL.WAREHOUSE_DESC,
SL.MAKE_TO_FLAG,
SL.source_create_date,
SL.source_update_date,
SL.source_created_by,
SL.source_updated_by,
SL.ENTITY_CODE,
SL.RECORD_ID,
SL.SRC_SYS_ENT_ID,
SL.BSS_HIERARCHY_KEY,
'Y' SERVICE_LVL_FLAG
FROM ( SELECT SL_INT.SYS_ENT_ID,
SL_INT.CUSTOMER_NO,
SL_INT.BILL_TO_LOCATION,
SL_INT.PART_NO,
SL_INT.SRCE_SYS_ID,
SL_INT.BUS_AREA_ID,
SL_INT.CONTRACT,
SL_INT.WAREHOUSE,
SL_INT.ORDER_NO,
SL_INT.LINE_NO,
MAX (SL_INT.REL_NO) REL_NO,
SL_INT.REVISED_DUE_DATE,
SUM (SL_INT.REVISED_QTY_DUE) REVISED_QTY_DUE,
SUM (SL_INT.QTY_SHIPPED) QTY_SHIPPED,
SL_INT.ABBREVIATION,
MAX (SL_INT.CREATE_DATE) CREATE_DATE,
MAX (SL_INT.RECORD_DATE) RECORD_DATE,
SL_INT.BASE_WAREHOUSE,
MAX (SL_INT.LAST_SHIPMENT_DATE) LAST_SHIPMENT_DATE,
MAX (SL_INT.EARLIEST_SHIP_DATE) EARLIEST_SHIP_DATE,
MAX (SL_INT.LATEST_SHIP_DATE) LATEST_SHIP_DATE,
MAX (
CASE
WHEN TRUNC (SL_INT.LAST_SHIPMENT_DATE) <=
TRUNC (SL_INT.LATEST_SHIP_DATE)
THEN
TRUNC (SL_INT.LAST_SHIPMENT_DATE)
ELSE
TRUNC (SL_INT.LATEST_SHIP_DATE)
END)
SERVICE_DATE,
MIN (
CASE
WHEN TRUNC (SL_INT.LAST_SHIPMENT_DATE) >=
TRUNC (SL_INT.EARLIEST_SHIP_DATE)
AND TRUNC (SL_INT.LAST_SHIPMENT_DATE) <=
TRUNC (SL_INT.LATEST_SHIP_DATE)
AND SL_INT.QTY_SHIPPED = SL_INT.REVISED_QTY_DUE
THEN
100
ELSE
0
END)
SHIP_PCT,
SL_INT.ABC_CLASS,
SL_INT.LOCATION_ID,
SL_INT.WAREHOUSE_DESC,
SL_INT.MAKE_TO_FLAG,
MAX (SL_INT.source_create_date) source_create_date,
MAX (SL_INT.source_update_date) source_update_date,
SL_INT.source_created_by,
SL_INT.source_updated_by,
SL_INT.ENTITY_CODE,
SL_INT.RECORD_ID,
SL_INT.SRC_SYS_ENT_ID,
SL_INT.BSS_HIERARCHY_KEY
FROM (SELECT SL_UNADJ.*,
DECODE (
TRIM (TIMA.DAY_DESC),
'saturday', SL_UNADJ.REVISED_DUE_DATE
- 1
- early_ship_days,
'sunday', SL_UNADJ.REVISED_DUE_DATE
- 2
- early_ship_days,
SL_UNADJ.REVISED_DUE_DATE - early_ship_days)
EARLIEST_SHIP_DATE,
DECODE (
TRIM (TIMB.DAY_DESC),
'saturday', SL_UNADJ.REVISED_DUE_DATE
+ 2
+ LATE_SHIP_DAYS,
'sunday', SL_UNADJ.REVISED_DUE_DATE
+ 1
+ LATE_SHIP_DAYS,
SL_UNADJ.REVISED_DUE_DATE + LATE_SHIP_DAYS)
LATEST_SHIP_DATE
FROM (SELECT NVL (s2.sys_ent_id, '00') SYS_ENT_ID,
cust.customer_no CUSTOMER_NO,
cust.bill_to_loc BILL_TO_LOCATION,
cust.early_ship_days,
CUST.LATE_SHIP_DAYS,
ord.PART_NO,
ord.SRCE_SYS_ID,
ord.BUS_AREA_ID,
ord.BUS_AREA_ID CONTRACT,
NVL (WAREHOUSE, ord.entity_code) WAREHOUSE,
ORDER_NO,
ORDER_LINE_NO LINE_NO,
ORDER_REL_NO REL_NO,
TRUNC (REVISED_DUE_DATE) REVISED_DUE_DATE,
REVISED_ORDER_QTY REVISED_QTY_DUE,
-- NULL QTY_RESERVED,
-- NULL QTY_PICKED,
SHIPPED_QTY QTY_SHIPPED,
sold_to_abbreviation ABBREVIATION,
-- NULL ACCT_WEEK,
-- NULL ACCT_MONTH,
-- NULL ACCT_YEAR,
-- NULL UPDATED_FLAG,
ord.CREATE_DATE CREATE_DATE,
ord.CREATE_DATE RECORD_DATE,
NVL (WAREHOUSE, ord.entity_code)
BASE_WAREHOUSE,
LAST_SHIPMENT_DATE,
TRUNC (REVISED_DUE_DATE)
- cust.early_ship_days
EARLIEST_SHIP_DATE_UnAdj,
TRUNC (REVISED_DUE_DATE)
+ CUST.LATE_SHIP_DAYS
LATEST_SHIP_DATE_UnAdj,
--0 ALLOC_PCT,
--0 WHSE_PCT,
ABC_CLASS,
NVL (LOCATION_ID, '000') LOCATION_ID,
--NULL RELEASE_COMP,
WAREHOUSE_DESC,
NVL (
DECODE (MAKE_TO_FLAG,
'S', 0,
'O', 1,
'', -1),
-1)
MAKE_TO_FLAG,
ord.CREATE_DATE source_create_date,
ord.UPDATE_DATE source_update_date,
ord.CREATED_BY source_created_by,
ord.UPDATED_BY source_updated_by,
ord.ENTITY_CODE,
ord.RECORD_ID,
src.SYS_ENT_ID SRC_SYS_ENT_ID,
ord.BSS_HIERARCHY_KEY
FROM EDW_DTL_ORDER_FACT ord,
edw_v_maxv_cust_dim cust,
edw_v_maxv_part_dim part,
EDW_WAREHOUSE_LKP war,
EDW_SOURCE_LKP src,
MEDW_PLANT_LKP s2,
edw_v_incr_refresh_ctl incr
WHERE ord.BSS_HIERARCHY_KEY =
cust.BSS_HIERARCHY_KEY(+)
AND ord.record_id = part.record_id(+)
AND ord.part_no = part.part_no(+)
AND NVL (ord.WAREHOUSE, ord.entity_code) =
war.WAREHOUSE_code(+)
AND ord.entity_code = war.entity_code(+)
AND ord.record_id = src.record_id
AND src.calculate_back_order_flag = 'Y'
AND NVL (cancel_order_flag, 'N') != 'Y'
AND UPPER (part.source_plant) =
UPPER (s2.location_code1(+))
AND mapping_name = 'MEDW_MAP_GIEA_MTOS_STG'
-- AND NVL (ord.UPDATE_DATE, SYSDATE) >=
-- MAX_SOURCE_UPDATE_DATE
AND UPPER (
NVL (ord.order_status, 'BOOKED')) NOT IN
('ENTERED', 'CANCELLED')
AND TRUNC (REVISED_DUE_DATE) <= SYSDATE) SL_UNADJ,
EDW_TIME_DIM TIMA,
EDW_TIME_DIM TIMB
WHERE TRUNC (SL_UNADJ.EARLIEST_SHIP_DATE_UnAdj) =
TIMA.ACCOUNT_DATE
AND TRUNC (SL_UNADJ.LATEST_SHIP_DATE_Unadj) =
TIMB.ACCOUNT_DATE) SL_INT
WHERE TRUNC (LATEST_SHIP_DATE) <= TRUNC (SYSDATE)
GROUP BY SL_INT.SYS_ENT_ID,
SL_INT.CUSTOMER_NO,
SL_INT.BILL_TO_LOCATION,
SL_INT.PART_NO,
SL_INT.SRCE_SYS_ID,
SL_INT.BUS_AREA_ID,
SL_INT.CONTRACT,
SL_INT.WAREHOUSE,
SL_INT.ORDER_NO,
SL_INT.LINE_NO,
SL_INT.REVISED_DUE_DATE,
SL_INT.ABBREVIATION,
SL_INT.BASE_WAREHOUSE,
SL_INT.ABC_CLASS,
SL_INT.LOCATION_ID,
SL_INT.WAREHOUSE_DESC,
SL_INT.MAKE_TO_FLAG,
SL_INT.source_created_by,
SL_INT.source_updated_by,
SL_INT.ENTITY_CODE,
SL_INT.RECORD_ID,
SL_INT.SRC_SYS_ENT_ID,
SL_INT.BSS_HIERARCHY_KEY) SL
WHERE (SL.BSS_HIERARCHY_KEY,
SL.ORDER_NO,
Sl.line_no,
sl.Revised_due_date,
SL.PART_NO,
sl.sys_ent_id) NOT IN
(SELECT BSS_HIERARCHY_KEY,
ORDER_NO,
line_no,
revised_due_date,
part_no,
src_sys_ent_id
FROM MEDW_MTOS_DTL_FACT
WHERE service_lvl_flag = 'Y');
thanks
asnAlso 'NOT IN' + nullable columns can be an expensive combination - and may not give the expected results. For example, compare these:
with test1 as ( select 1 as key1 from dual )
, test2 as ( select null as key2 from dual )
select * from test1
where key1 not in
( select key2 from test2 );
no rows selected
with test1 as ( select 1 as key1 from dual )
, test2 as ( select null as key2 from dual )
select * from test1
where key1 not in
( select key2 from test2
where key2 is not null );
KEY1
1
1 row selected.Even if the columns do contain values, if they are nullable Oracle has to perform a resource-intensive filter operation in case they are null. An EXISTS construction is not concerned with null values and can therefore use a more efficient execution plan, leading people to think it is inherently faster in general. -
Performance Issue in Select Statement (For All Entries)
Hello,
I have a report where i have two select statement
First Select Statement:
Select A B C P Q R
from T1 into Table it_t1
where ....
Internal Table it_t1 is populated with 359801 entries through this select statement.
Second Select Statement:
Select A B C X Y Z
from T2 in it_t2 For All Entries in it_t1
where A eq it_t1-A
and B eq it_t1-B
and C eq it_t1-C
Now Table T2 contains more than 10 lac records and at the end of select statement it_t2 is populated with 844003 but it takes a lot of time (15 -20 min) to execute second select statement.
Can this code be optimized?
Also i have created respective indexes on table T1 and T2 for the fields in Where Condition.
Regards,If you have completed all the steps mentioned by others, in the above thread, and still you are facing issues then,.....
Use a Select within Select.
First Select Statement:
Select A B C P Q R package size 5000
from T1 into Table it_t1
where ....
Second Select Statement:
Select A B C X Y Z
from T2 in it_t2 For All Entries in it_t1
where A eq it_t1-A
and B eq it_t1-B
and C eq it_t1-C
do processing........
endselect
This way, while using for all entries on T2, your it_t1, will have limited number of entries and thus the 2nd select will be faster.
Thanks,
Juwin -
Performance Issue - Fetching latest date from a507 table
Hi All,
I am fetching data from A507 table for material and batch combination. I want to fetch the latest record based on the value of field DATBI. I have written the code as follows. But in the select query its taking more time. I dont want to write any condition in where claue for DATBI field because I have already tried with that option.
SELECT kschl
matnr
charg
datbi
knumh
FROM a507
INTO TABLE it_a507
FOR ALL ENTRIES IN lit_mch1
WHERE kschl = 'ZMRP'
AND matnr = lit_mch1-matnr
AND charg = lit_mch1-charg.
SORT it_a507 BY kschl matnr charg datbi DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_a507 COMPARING kschl matnr charg.Hi,
These kind of tables will be storing large volumes of data. Thus while making a select on it, its important to use as many primary key fields as possible in the where condition. Here you can try mentioning KAPPL since its specific to a requirement. If its for purchasing use 'M' and try.
if not lit_mch1[] is initial.
SELECT kschl
matnr
charg
datbi
knumh
FROM a507
INTO TABLE it_a507
FOR ALL ENTRIES IN lit_mch1
WHERE kappl = 'M'
AND kschl = 'ZMRP'
AND matnr = lit_mch1-matnr
AND charg = lit_mch1-charg.
endif.
SORT it_a507 BY kschl matnr charg datbi DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_a507 COMPARING kschl matnr charg.
This should considerably increase the performance
Regards,
Vik -
Performance issue in select query
Moderator message: do not post the same question in two forums. Duplicate (together with answers) deleted.
SELECT a~grant_nbr
a~zzdonorfy
a~company_code
b~language
b~short_desc
INTO TABLE i_gmgr_text
FROM gmgr AS a
INNER JOIN gmgrtexts AS b ON a~grant_nbr = b~grant_nbr
WHERE a~grant_nbr IN s_grant
AND a~zzdonorfy IN s_dono
AND b~language EQ sy-langu
AND b~short_desc IN s_cont.
How to use for all all entries in the above inner join for better performance?
then....
IF sy-subrc EQ 0.
SORT i_gmgr_text BY grant_nbr.
ENDIF.
IF i_gmgr_text[] IS NOT INITIAL.
* Actual Line Item Table
SELECT rgrant_nbr
gl_sirid
rbukrs
rsponsored_class
refdocnr
refdocln
FROM gmia
INTO TABLE i_gmia
FOR ALL ENTRIES IN i_gmgr_text
WHERE rgrant_nbr = i_gmgr_text-grant_nbr
AND rbukrs = i_gmgr_text-company_code
AND rsponsored_class IN s_spon.
IF sy-subrc EQ 0.
SORT i_gmia BY refdocnr refdocln.
ENDIF.
Edited by: Matt on Dec 17, 2008 1:40 PM> How to use for all all entries in the above inner join for better performance?
my best christmas recommendation for performance, simply ignore such recommendations.
And check the performance of your join!
Is the performance really low, if it is then there is probably no index support. Without indexes FOR ALL ENTRIES will be much slower.
Siegfried
Maybe you are looking for
-
Agentry App crashes on Device but not in the ATE Testenvirement
Hello, we make a app which works fine in the ATE Testenvirement and also in a iPhone but our main Plattform is the The WIndows Mobile Pocket PC. We use a Motorola MC65 with Windows Mobile 6.1 Professional. On the Motorola the app crashes in a definit
-
I did...can someone please fix this?
-
Screen gone Dull on Satellite Pro A200
I have a Satellite Pro A200 that works fine on an external monitor, but is very dull on the laptop monitor. Does anyone know if it is backlit, and if the lights are replaceable, or do I need a new screen? Fn + F5/F6 doesn't do anything. Correcting th
-
Screen Resolution mismatch. Can I force resolution prefs of remote machine?
Using Apple Remote Desktop, or Timbuktu, I'm connecting to a remote server that does not have a monitor attached. Problem: I only have 2 screen resolutions available on the remote machine: 800 x 600 or 1024 x 768. My local screen resolution is 2560 x
-
Multiple Java Console open in JRE 1.7 on IE8 browser
Our application has interface in HTML where we used LiveConnect for Java and Java Script using Applet. Single HTML page loaded multiple Applet. When we access our application using JRE7 on IE8 then it opens multiple Java console window which result t