Fetch the records from cache
say i have emp table
eno ename sales
1 david 1100
2 lara 200
3 james 1000
1 david 1200
2 lara 5400
4 white 890
3 james 7500
1 david 1313
eno can be duplicate
when i give empno is 1
i want to display his sales i.e 1100,1200,1313
first time i will go to database and fetch the records
but next time onwards i dont go to database; i will fetch the records from cache;
i thought doing it using hashmap or hasptable ;both those two don't allow duplicate values(empno has duplicate values);
How to solve this problem.
Hi,
Ever considered splitting that table up. You are thinking about caching thats a
very good idea. But doesnt it make it vary evident that the table staructure that you have
keeps a lot of redundant data. Specially it hardly makes a sense to have sales
figures in a emp table. Instead you can have Emp table containing eno and
ename with eno as the primary key and have another table called sales with eno
and sales columns and in this case the eno references the Emp table.
If you still want to continue with this structure then I think you can go ahead with
the solution already suggested to you
Aviroop
Similar Messages
-
Hi all
I want to fetch just twenty thousands records from table. My query take more time to fetch twenty thousands records. I post my working query, Could you correct the query for me. thanks in advance.
Query
select
b.Concatenated_account Account,
b.Account_description description,
SUM(case when(Bl.ACTUAL_FLAG='B') then
((NVL(Bl.PERIOD_NET_DR, 0)- NVL(Bl.PERIOD_NET_CR, 0)) + (NVL(Bl.PROJECT_TO_DATE_DR, 0)- NVL(Bl.PROJECT_TO_DATE_CR, 0)))end) "Budget_2011"
from
gl_balances Bl,
gl_code_combinations GCC,
psb_ws_line_balances_i b ,
gl_budget_versions bv,
gl_budgets_v gv
where
b.CODE_COMBINATION_ID=gcc.CODE_COMBINATION_ID and bl.CODE_COMBINATION_ID=gcc.CODE_COMBINATION_ID and
bl.budget_version_id =bv.BUDGET_VERSION_ID and gv.budget_version_id= bv.budget_version_id
and gv.latest_opened_year in (select latest_opened_year-3 from gl_budgets_v where latest_opened_year=:BUDGET_YEAR )
group by b.Concatenated_account ,b.Account_descriptionHi,
If this question is related to SQL then please post in SQL forum.
Otherwise provide more information how this sql is being used and do you want to tune the SQL or the way it fetches the information from DB and display in OAF.
Regards,
Sandeep M. -
How to quickly fetch the records from an SQL recordset
I'm using LW/CVI V7.1.1 and SQL Toolkit V2.06.
When displaying the recordset from a SELECT statement I use the following construct:
SQLhandle1 = DBActivateSQL(DBhandle, SELECTtext);
DBBindCol() statements.......
numRecs = DBNumberOfRecords(SQLhandle1);
for (n=1; n<=numRecs; n++) {
DBFetchNext(SQLhandle1);
display record to the user...
DBDeactivateSQL (SQLhandle1);
This has always worked fine for me when using local databases. Now I am developing an app for a remote database, and the fetching of each selected record is proving to be an issue. It takes at best, 60msecs for my round-trip network access to fetch each record. If selecting very many records, the fetching can add up to a considerable time delay.
My question is, how can I bind the entire recordset to my application variables, (or to a local table?) in a single request to the database? Does LW/CVI support such a method? Or perhaps someone knows an SQL method to help me?
ThanksHi Michael,
Thanks for the help. This is what I was looking for. Not sure why I missed it!
However, after trying it out, it doesn't seem to help. The statement: DBGetVariantArray(SQLhandle, &array, &recs, &fields); seems to take the same amount of time to get the records as the individual DBFetchNext() statements. So if my SQL statement matches 100 records, the DBGetVariantArray() call will take 100*60msec to complete.
Is there a DB attribute setting that needs changed? -
Urgent: Problem in Fetching the records from ITAB3
hi,
here's d code,and the bold is dere where i am facing the problem i.e. whne i append lines of ITAB2 to ITAB3 it takes 32,234 records but in reality in ITAB2 there are 39 records,ITFINAL contains 45 records which is displaying the coreect data.
But why ITAB3 conatins 32,234 records in it.
it might hit th eperformance of the report.
TABLES: RSEG.
***********DECLARATION OF TABLES*************
************TABLE BKPF - ACCOUNTING HEADER ***********
DATA: BEGIN OF ITBKPF OCCURS 0,
BUKRS LIKE BKPF-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
AWKEY LIKE BKPF-AWKEY,
BUDAT LIKE BKPF-BUDAT,
XBLNR LIKE BKPF-XBLNR,
AWTYP LIKE BKPF-AWTYP,
END OF ITBKPF.
*********TABLE BSIK - ACCOUNTING OPEN ITEMS********
DATA: BEGIN OF ITAB2 OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BSIK-BUKRS,
GJAHR LIKE BSIK-GJAHR,
BELNR LIKE BSIK-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITAB2.
**********TABLE BSAK - ACCOUNTING CLEAR ITEMS*******
DATA: BEGIN OF ITAB3 OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BSAK-BUKRS,
GJAHR LIKE BSAK-GJAHR,
BELNR LIKE BSAK-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITAB3.
DATA: BEGIN OF ITDEMO OCCURS 0,
BELNR LIKE RSEG-BELNR,
GJAHR LIKE RSEG-GJAHR,
LFBNR LIKE RSEG-LFBNR,
XBLNR LIKE RSEG-XBLNR,
END OF ITDEMO.
*****FINAL TABLE TO GATHER N DISPLAY OUTPUT*****
DATA: BEGIN OF ITFINAL OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BKPF-BUKRS,
GJAHR LIKE BKPF-GJAHR,
BELNR LIKE BKPF-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITFINAL.
**********END OF DECLARATIONS*************
SELECT-OPTIONS: P_LFBNR FOR RSEG-LFBNR.
*************FETCHING OF THE DATA*************
START-OF-SELECTION.
BKPF
SELECT BUKRS BELNR GJAHR AWKEY BUDAT XBLNR AWTYP
FROM BKPF
INTO (ITBKPF-BUKRS,ITBKPF-BELNR,ITBKPF-GJAHR,
ITBKPF-AWKEY,ITBKPF-BUDAT,ITBKPF-XBLNR,ITBKPF-AWTYP)
WHERE AWTYP EQ 'MKPF' OR AWTYP EQ 'RMRP'.
o
+ MKPF*
************BEGIN OF TRY CODE FOR A MATERIAL DOCUMENT************
ITDEMO-BELNR = ITBKPF-AWKEY(10).
ITDEMO-GJAHR = ITBKPF-AWKEY+10(4).
ITDEMO-XBLNR = ITBKPF-XBLNR.
SELECT LFBNR FROM RSEG INTO
(ITDEMO-LFBNR) WHERE
BELNR EQ ITBKPF-AWKEY(10) AND
GJAHR EQ ITBKPF-AWKEY+10(4) AND
XBLNR EQ ITBKPF-XBLNR AND LFBNR > 0.
CHECK SY-SUBRC EQ 0 AND ITDEMO-LFBNR IN P_LFBNR.
************END OF TRY CODE FOR A MATERIAL DOCUMENT***************
ITAB2-BUKRS = ITBKPF-BUKRS.
ITAB2-GJAHR = ITBKPF-GJAHR.
ITAB2-BELNR = ITBKPF-BELNR.
ITAB3-BUKRS = ITBKPF-BUKRS.
ITAB3-GJAHR = ITBKPF-GJAHR.
ITAB3-BELNR = ITBKPF-BELNR.
o
+ BSIK*
SELECT WRBTR LIFNR FROM BSIK
INTO (ITAB2-WRBTR, ITAB2-LIFNR)
WHERE BUKRS EQ ITBKPF-BUKRS
AND GJAHR EQ ITBKPF-GJAHR
AND BELNR EQ ITBKPF-BELNR.
APPEND ITAB2.
EXIT.
ENDSELECT.
o
+
BSAK*
SELECT WRBTR LIFNR AUGBL AUGDT
FROM BSAK
INTO (ITAB3-WRBTR,ITAB3-LIFNR,ITAB3-AUGBL,ITAB3-AUGDT)
WHERE BUKRS EQ ITBKPF-BUKRS
AND GJAHR EQ ITBKPF-GJAHR
AND BELNR EQ ITBKPF-BELNR.
APPEND ITAB3.
EXIT.
ENDSELECT.
APPEND ITDEMO.
EXIT.
ENDSELECT.
APPEND ITBKPF.
ENDSELECT.
Fields Found?
READ TABLE ITBKPF TRANSPORTING NO FIELDS INDEX 1.
IF sy-subrc NE 0.
MESSAGE i000(zmm1) WITH 'No documents found!'.
ENDIF.
Prepare Output
LOOP AT ITBKPF.
CLEAR ITAB2.
READ TABLE ITAB2
WITH KEY BUKRS = ITBKPF-BUKRS
BELNR = ITBKPF-BELNR
GJAHR = ITBKPF-GJAHR.
CHECK sy-subrc EQ 0?
CLEAR ITAB3.
READ TABLE ITAB3
WITH KEY BUKRS = ITBKPF-BUKRS
BELNR = ITBKPF-BELNR
GJAHR = ITBKPF-GJAHR. .
CHECK sy-subrc EQ 0?
READ TABLE ITDEMO
WITH KEY BELNR = ITBKPF-AWKEY(10).
CHECK sy-subrc EQ 0?
APPEND LINES OF ITAB2 TO ITAB3.
CHECK sy-subrc EQ 0?
ITFINAL-LFBNR = ITDEMO-LFBNR.
ITFINAL-BUKRS = ITBKPF-BUKRS.
ITFINAL-BELNR = ITBKPF-BELNR.
ITFINAL-GJAHR = ITBKPF-GJAHR.
ITFINAL-AWKEY = ITBKPF-AWKEY.
ITFINAL-WRBTR = ITAB3-WRBTR.
ITFINAL-LIFNR = ITAB3-LIFNR.
ITFINAL-AUGBL = ITAB3-AUGBL.
ITFINAL-AUGDT = ITAB3-AUGDT.
DELETE ITFINAL WHERE WRBTR = 0.
APPEND ITFINAL.
CLEAR ITFINAL.
ENDLOOP.
SORT ITFINAL BY AUGBL AUGDT .
END-OF-SELECTION
END-OF-SELECTION.
Output
LOOP AT ITFINAL.
WRITE: / ITFINAL-LFBNR,ITFINAL-BELNR, ITFINAL-GJAHR,ITFINAL-AWKEY, ITFINAL-WRBTR, ITFINAL-LIFNR,ITFINAL-AUGBL,ITFINAL-AUGDT.
ENDLOOP.hi,
actually i have to display the open n clear items with respect to the MATERIAL DOCUMENT.
try to execute the code which i am displaying below:-
TABLES: RSEG.
**********DECLARATION OF TABLES************
***********TABLE BKPF - ACCOUNTING HEADER **********
DATA: BEGIN OF ITBKPF OCCURS 0,
BUKRS LIKE BKPF-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
AWKEY LIKE BKPF-AWKEY,
BUDAT LIKE BKPF-BUDAT,
XBLNR LIKE BKPF-XBLNR,
AWTYP LIKE BKPF-AWTYP,
END OF ITBKPF.
********TABLE BSIK - ACCOUNTING OPEN ITEMS*******
DATA: BEGIN OF ITAB2 OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BSIK-BUKRS,
GJAHR LIKE BSIK-GJAHR,
BELNR LIKE BSIK-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITAB2.
*********TABLE BSAK - ACCOUNTING CLEAR ITEMS******
DATA: BEGIN OF ITAB3 OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BSAK-BUKRS,
GJAHR LIKE BSAK-GJAHR,
BELNR LIKE BSAK-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITAB3.
*********TABLE BSIS - MIRO NOT PERFORMED*******
DATA: BEGIN OF ITAB4 OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BSIS-BUKRS,
GJAHR LIKE BSIS-GJAHR,
BELNR LIKE BSIS-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITAB4.
**********TABLE RSEG - FOR MATERIAL DOCUMENT********
DATA: BEGIN OF ITDEMO OCCURS 0,
BELNR LIKE RSEG-BELNR,
GJAHR LIKE RSEG-GJAHR,
LFBNR LIKE RSEG-LFBNR,
XBLNR LIKE RSEG-XBLNR,
END OF ITDEMO.
****FINAL TABLE TO GATHER N DISPLAY OUTPUT****
DATA: BEGIN OF ITFINAL OCCURS 0,
LFBNR LIKE RSEG-LFBNR,
BUKRS LIKE BKPF-BUKRS,
GJAHR LIKE BKPF-GJAHR,
BELNR LIKE BKPF-BELNR,
AWKEY LIKE BKPF-AWKEY,
WRBTR LIKE BSIK-WRBTR,
LIFNR LIKE BSIK-LIFNR,
AUGBL LIKE BSAK-AUGBL,
AUGDT LIKE BSAK-AUGDT,
END OF ITFINAL.
*********END OF DECLARATIONS************
SELECT-OPTIONS: P_LFBNR FOR RSEG-LFBNR.
************FETCHING OF THE DATA************
START-OF-SELECTION.
BKPF
SELECT BUKRS BELNR GJAHR AWKEY BUDAT XBLNR AWTYP
FROM BKPF
INTO (ITBKPF-BUKRS,ITBKPF-BELNR,ITBKPF-GJAHR,
ITBKPF-AWKEY,ITBKPF-BUDAT,ITBKPF-XBLNR,ITBKPF-AWTYP)
WHERE AWTYP EQ 'MKPF' OR AWTYP EQ 'RMRP'.
MKPF
***********BEGIN OF TRY CODE FOR A MATERIAL DOCUMENT***********
ITDEMO-BELNR = ITBKPF-AWKEY(10).
ITDEMO-GJAHR = ITBKPF-AWKEY+10(4).
ITDEMO-XBLNR = ITBKPF-XBLNR.
SELECT LFBNR FROM RSEG INTO
(ITDEMO-LFBNR) WHERE
BELNR EQ ITBKPF-AWKEY(10) AND
GJAHR EQ ITBKPF-AWKEY+10(4) AND
XBLNR EQ ITBKPF-XBLNR AND LFBNR > 0.
CHECK SY-SUBRC EQ 0 AND ITDEMO-LFBNR IN P_LFBNR.
***********END OF TRY CODE FOR A MATERIAL DOCUMENT**************
ITAB2-BUKRS = ITBKPF-BUKRS.
ITAB2-GJAHR = ITBKPF-GJAHR.
ITAB2-BELNR = ITBKPF-BELNR.
ITAB3-BUKRS = ITBKPF-BUKRS.
ITAB3-GJAHR = ITBKPF-GJAHR.
ITAB3-BELNR = ITBKPF-BELNR.
BSIK
SELECT WRBTR LIFNR FROM BSIK
INTO (ITAB2-WRBTR, ITAB2-LIFNR)
WHERE BUKRS EQ ITBKPF-BUKRS
AND GJAHR EQ ITBKPF-GJAHR
AND BELNR EQ ITBKPF-BELNR.
APPEND ITAB2.
EXIT.
ENDSELECT.
BSAK
SELECT WRBTR LIFNR AUGBL AUGDT
FROM BSAK
INTO (ITAB3-WRBTR,ITAB3-LIFNR,ITAB3-AUGBL,ITAB3-AUGDT)
WHERE BUKRS EQ ITBKPF-BUKRS
AND GJAHR EQ ITBKPF-GJAHR
AND BELNR EQ ITBKPF-BELNR.
APPEND ITAB3.
EXIT.
ENDSELECT.
BSIS
SELECT WRBTR XREF3 FROM BSIS
INTO (ITAB1-WRBTR, ITAB1-XREF3)
WHERE BUKRS EQ ITBKPF-BUKRS
AND GJAHR EQ ITBKPF-GJAHR
AND BELNR EQ ITBKPF-BELNR.
APPEND ITAB1.
EXIT.
ENDSELECT.
CHECK sy-subrc EQ 0?
APPEND ITDEMO.
EXIT.
ENDSELECT.
APPEND ITBKPF.
ENDSELECT.
Fields Found?
READ TABLE ITBKPF TRANSPORTING NO FIELDS INDEX 1.
IF sy-subrc NE 0.
MESSAGE i000(zmm1) WITH 'No documents found!'.
ENDIF.
Prepare Output
LOOP AT ITBKPF.
CLEAR ITAB2.
READ TABLE ITAB2
WITH KEY BUKRS = ITBKPF-BUKRS
BELNR = ITBKPF-BELNR
GJAHR = ITBKPF-GJAHR." BINARY SEARCH..
CHECK sy-subrc EQ 0?
CLEAR ITAB3.
READ TABLE ITAB3
WITH KEY BUKRS = ITBKPF-BUKRS
BELNR = ITBKPF-BELNR
GJAHR = ITBKPF-GJAHR." BINARY SEARCH. .
CHECK sy-subrc EQ 0?
READ TABLE ITDEMO
WITH KEY BELNR = ITBKPF-AWKEY(10).
CHECK sy-subrc EQ 0?
APPEND LINES OF ITAB2 TO ITAB3.
CHECK sy-subrc EQ 0?
ITFINAL-LFBNR = ITDEMO-LFBNR.
ITFINAL-BUKRS = ITBKPF-BUKRS.
ITFINAL-BELNR = ITBKPF-BELNR.
ITFINAL-GJAHR = ITBKPF-GJAHR.
ITFINAL-AWKEY = ITBKPF-AWKEY.
ITFINAL-WRBTR = ITAB3-WRBTR.
ITFINAL-LIFNR = ITAB3-LIFNR.
ITFINAL-AUGBL = ITAB3-AUGBL.
ITFINAL-AUGDT = ITAB3-AUGDT.
DELETE ITFINAL WHERE WRBTR = 0.
APPEND ITFINAL.
CLEAR ITFINAL.
ENDLOOP.
SORT ITFINAL BY AUGBL AUGDT .
END-OF-SELECTION
END-OF-SELECTION.
Output
WRITE: /' OPEN ITEMS -> PAYMENTS ARE NOT DONE'.
ULINE.
WRITE: / 'MAT.DOC. A/C DOC. YEAR REF.KEY AMOUNT VENDOR CLR.DOC. CLR.DATE' .
ULINE.
LOOP AT ITFINAL.
WRITE: / ITFINAL-LFBNR,ITFINAL-BELNR, ITFINAL-GJAHR,ITFINAL-AWKEY, ITFINAL-WRBTR, ITFINAL-LIFNR,ITFINAL-AUGBL,ITFINAL-AUGDT.
ENDLOOP. -
Hi,
Please suggest me the best way to fetch the record from the table designed below. It is Oracle 10gR2 on Linux
Whenever a client visit the office a record will be created for him. The company policy is to maintain 10 years of data on the transaction table but the table holds record count of 3 Million records per year.
The table has the following key Columns for the Select (sample Table)
Client_Visit
ID Number(12,0) --sequence generated number
EFF_DTE DATE --effective date of the customer (sometimes the client becomes invalid and he will be valid again)
Create_TS Timestamp(6)
Client_ID Number(9,0)
Cascade Flg vahrchar2(1)
On most of the reports the records are fetched by Max(eff_dte) and Max(create_ts) and cascade flag ='Y'.
I have following queries but the both of them are not cost effective and takes 8 minutes to display the records.
Code 1:
SELECT au_subtyp1.au_id_k,
au_subtyp1.pgm_struct_id_k
FROM au_subtyp au_subtyp1
WHERE au_subtyp1.create_ts =
(SELECT MAX (au_subtyp2.create_ts)
FROM au_subtyp au_subtyp2
WHERE au_subtyp2.au_id_k =
au_subtyp1.au_id_k
AND au_subtyp2.create_ts <
TO_DATE ('2013-01-01',
'YYYY-MM-DD'
AND au_subtyp2.eff_dte =
(SELECT MAX
(au_subtyp3.eff_dte
FROM au_subtyp au_subtyp3
WHERE au_subtyp3.au_id_k =
au_subtyp2.au_id_k
AND au_subtyp3.create_ts <
TO_DATE
('2013-01-01',
'YYYY-MM-DD'
AND au_subtyp3.eff_dte < =
TO_DATE
('2012-12-31',
'YYYY-MM-DD'
AND au_subtyp1.exists_flg = 'Y'
Explain Plan
Plan hash value: 2534321861
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 91 | | 33265 (2)| 00:06:40 |
|* 1 | FILTER | | | | | | |
| 2 | HASH GROUP BY | | 1 | 91 | | 33265 (2)| 00:06:40 |
|* 3 | HASH JOIN | | 1404K| 121M| 19M| 33178 (1)| 00:06:39 |
|* 4 | HASH JOIN | | 307K| 16M| 8712K| 23708 (1)| 00:04:45 |
| 5 | VIEW | VW_SQ_1 | 307K| 5104K| | 13493 (1)| 00:02:42 |
| 6 | HASH GROUP BY | | 307K| 13M| 191M| 13493 (1)| 00:02:42 |
|* 7 | INDEX FULL SCAN | AUSU_PK | 2809K| 125M| | 13493 (1)| 00:02:42 |
|* 8 | INDEX FAST FULL SCAN| AUSU_PK | 2809K| 104M| | 2977 (2)| 00:00:36 |
|* 9 | TABLE ACCESS FULL | AU_SUBTYP | 1404K| 46M| | 5336 (2)| 00:01:05 |
Predicate Information (identified by operation id):
1 - filter("AU_SUBTYP1"."CREATE_TS"=MAX("AU_SUBTYP2"."CREATE_TS"))
3 - access("AU_SUBTYP2"."AU_ID_K"="AU_SUBTYP1"."AU_ID_K")
4 - access("AU_SUBTYP2"."EFF_DTE"="VW_COL_1" AND "AU_ID_K"="AU_SUBTYP2"."AU_ID_K")
7 - access("AU_SUBTYP3"."EFF_DTE"<=TO_DATE(' 2012-12-31 00:00:00', 'syyyy-mm-dd
hh24:mi:ss') AND "AU_SUBTYP3"."CREATE_TS"<TIMESTAMP' 2013-01-01 00:00:00')
filter("AU_SUBTYP3"."CREATE_TS"<TIMESTAMP' 2013-01-01 00:00:00' AND
"AU_SUBTYP3"."EFF_DTE"<=TO_DATE(' 2012-12-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
8 - filter("AU_SUBTYP2"."CREATE_TS"<TIMESTAMP' 2013-01-01 00:00:00')
9 - filter("AU_SUBTYP1"."EXISTS_FLG"='Y')Code 2:
I already raised a thread a week back and Dom suggested the following query, it is cost effective but the performance is same and used the same amount of Temp tablespace
select au_id_k,pgm_struct_id_k from (
SELECT au_id_k
, pgm_struct_id_k
, ROW_NUMBER() OVER (PARTITION BY au_id_k ORDER BY eff_dte DESC, create_ts DESC) rn,
create_ts, eff_dte,exists_flg
FROM au_subtyp
WHERE create_ts < TO_DATE('2013-01-01','YYYY-MM-DD')
AND eff_dte <= TO_DATE('2012-12-31','YYYY-MM-DD')
) d where rn =1 and exists_flg = 'Y'
--Explain Plan
Plan hash value: 4039566059
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2809K| 168M| | 40034 (1)| 00:08:01 |
|* 1 | VIEW | | 2809K| 168M| | 40034 (1)| 00:08:01 |
|* 2 | WINDOW SORT PUSHED RANK| | 2809K| 133M| 365M| 40034 (1)| 00:08:01 |
|* 3 | TABLE ACCESS FULL | AU_SUBTYP | 2809K| 133M| | 5345 (2)| 00:01:05 |
Predicate Information (identified by operation id):
1 - filter("RN"=1 AND "EXISTS_FLG"='Y')
2 - filter(ROW_NUMBER() OVER ( PARTITION BY "AU_ID_K" ORDER BY
INTERNAL_FUNCTION("EFF_DTE") DESC ,INTERNAL_FUNCTION("CREATE_TS") DESC )<=1)
3 - filter("CREATE_TS"<TIMESTAMP' 2013-01-01 00:00:00' AND "EFF_DTE"<=TO_DATE('
2012-12-31 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))Thanks,
VijayHi Justin,
Thanks for your reply. I am running this on our Test environment as I don't want to run this on Production environment now. The test environment holds 2809605 records (2 Million).
The query output count is 281699 (2 Hundred Thousand) records and the selectivity is 0.099. The Distinct values of create_ts, eff_dte, and exists_flg is 2808905 records. I am sure the index scan is not going to help out much as you said.
The core problem is both queries are using lot of Temp tablespace. When we use this query to join the tables, the other table has the same design as below so the temp tablespace grows bigger.
Both the production and test environment are 3 Node RAC.
First Query...
CPU used by this session 4740
CPU used when call started 4740
Cached Commit SCN referenced 21393
DB time 4745
OS Involuntary context switches 467
OS Page reclaims 64253
OS System time used 26
OS User time used 4562
OS Voluntary context switches 16
SQL*Net roundtrips to/from client 9
bytes received via SQL*Net from client 2487
bytes sent via SQL*Net to client 15830
calls to get snapshot scn: kcmgss 37
consistent gets 52162
consistent gets - examination 2
consistent gets from cache 52162
enqueue releases 19
enqueue requests 19
enqueue waits 1
execute count 2
ges messages sent 1
global enqueue gets sync 19
global enqueue releases 19
index fast full scans (full) 1
index scans kdiixs1 1
no work - consistent read gets 52125
opened cursors cumulative 2
parse count (hard) 1
parse count (total) 2
parse time cpu 1
parse time elapsed 1
physical write IO requests 69
physical write bytes 17522688
physical write total IO requests 69
physical write total bytes 17522688
physical write total multi block requests 69
physical writes 2139
physical writes direct 2139
physical writes direct temporary tablespace 2139
physical writes non checkpoint 2139
recursive calls 19
recursive cpu usage 1
session cursor cache hits 1
session logical reads 52162
sorts (memory) 2
sorts (rows) 760
table scan blocks gotten 23856
table scan rows gotten 2809607
table scans (short tables) 1
user I/O wait time 1
user calls 11
workarea executions - onepass 1
workarea executions - optimal 9
Second Query
CPU used by this session 1197
CPU used when call started 1197
Cached Commit SCN referenced 21393
DB time 1201
OS Involuntary context switches 8684
OS Page reclaims 21769
OS System time used 14
OS User time used 1183
OS Voluntary context switches 50
SQL*Net roundtrips to/from client 9
bytes received via SQL*Net from client 767
bytes sent via SQL*Net to client 15745
calls to get snapshot scn: kcmgss 17
consistent gets 23871
consistent gets from cache 23871
db block gets 16
db block gets from cache 16
enqueue releases 25
enqueue requests 25
enqueue waits 1
execute count 2
free buffer requested 1
ges messages sent 1
global enqueue get time 1
global enqueue gets sync 25
global enqueue releases 25
no work - consistent read gets 23856
opened cursors cumulative 2
parse count (hard) 1
parse count (total) 2
parse time elapsed 1
physical read IO requests 27
physical read bytes 6635520
physical read total IO requests 27
physical read total bytes 6635520
physical read total multi block requests 27
physical reads 810
physical reads direct 810
physical reads direct temporary tablespace 810
physical write IO requests 117
physical write bytes 24584192
physical write total IO requests 117
physical write total bytes 24584192
physical write total multi block requests 117
physical writes 3001
physical writes direct 3001
physical writes direct temporary tablespace 3001
physical writes non checkpoint 3001
recursive calls 25
session cursor cache hits 1
session logical reads 23887
sorts (disk) 1
sorts (memory) 2
sorts (rows) 2810365
table scan blocks gotten 23856
table scan rows gotten 2809607
table scans (short tables) 1
user I/O wait time 2
user calls 11
workarea executions - onepass 1
workarea executions - optimal 5Thanks,
Vijay
Edited by: Vijayaraghavan Krishnan on Nov 28, 2012 11:17 AM
Edited by: Vijayaraghavan Krishnan on Nov 28, 2012 11:19 AM -
Can we split and fetch the records in Database Adapter
Hi,
I designed a Database Adapter to fetch the records from oracle Database. Some time, the Database Adapter need to fetch around 5000, or 10,000 records in single shot. In that case my BPEL process is choking and getting error as
java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
Could someone help me to resolve this?
In Database Adapter can we split and fetch the records, if number of records more then 1000.
ex. First 100 rec as one set and next 100 as 2nd set like this.
Thank you.You can send the records as batches useing the debatching feature of db adapter. Refer documentation for implementation details.
-
Picking the records from IT2011.....
Hi All,
I am writing the report as per the clients requirement. for this i am using the IT 0007, 2010, 2011. Here i am using the LDB PNP for this report. i have declared as below.
INFOTYPES: 0007, 2010,2011.
The infotypes are filling with the records which are existing in the infotype. Here even old data is also filling in the infotypes that means data other than the selected date from the selection screen.
To avoide this i have written provide statement as follows.
provide * from P2011 between pn-begda and pn-endda.
but i did not get any data from the above statement. My requirement is i need to fetch the records from the IT2011 for the entered date. can anybody tell how to fetch the records from the time infotypes for entered date.
Thanks & Regards,
Giri.Hi..
I suggest to use PNPCE LDB and use input as other perion option for selection screen
and you will get all the recordes valid during the period which you give and the recordes will coming in to the tables 0007, 2010,2011.and just you can read or loop the table.
TABLES : pernr.
INFOTYPES: 0001,
0007,
2011,
2010 .
NODES: peras.
TYPES : BEGIN OF ty_final,
pernr TYPE persno,
ename TYPE emnam,
PBTXT TYPE PBTXT,
BTRTX TYPE BTRTX,
END OF ty_final.
DATA : it_final TYPE TABLE OF ty_final,
wa_final TYPE ty_final.
DATA go_table TYPE REF TO cl_salv_table.
START-OF-SELECTION.
GET peras.
SORT p0001 BY endda DESCENDING.
READ TABLE p0001 INDEX 1.
wa_final-pernr = p0001-pernr.
wa_final-ename = p0001-ename .
CALL FUNCTION 'HRWPC_RFC_WERKS_TEXT_GET'
EXPORTING
werks = p0001-werks
IMPORTING
werks_text = wa_final-PBTXT.
CALL FUNCTION 'HRWPC_RFC_BTRTL_TEXT_GET'
EXPORTING
werks = p0001-werks
btrtl = p0001-btrtl
IMPORTING
btrtl_text = wa_final-BTRTX.
loop at p2010.
endloop.
APPEND wa_final TO it_final.
CLEAR wa_final.
END-OF-SELECTION.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = it_final.
go_table->display( ). -
How to fetch all the records from ztable
Hi
My program is outbound program.
According to the requirement i have to fetch all the records from ztable which are not tranmitted before to the third party and once the records are extracted and written to output file they will be marked as 'X' in the "status" field of that ztable for the next days run.
How to fetch the records.Please suggest me.
Thanks,
NeelimaHI,
Fetch all the records whose status is equal to 'X' as whatever data is sent to third party system is marked as 'X' in status field of table after sending.
You need to first fetch the data into internal table using the select statement where status EQ space. You get the data which is not yet transmitted to third part. And later in the program after trasmitting the data to third party modify the Records in the DB table which are transmitted with Staus eq 'X'. -
Hello,
Could someone help me please ?
I have a listing of my sales orders and I want to make changes in my order by opening the form and fetched with that record. When I click on that particular orderno in my listing of order and call the form to display the details, it calls the form but says "Query could not fetch the record". I do not know why ? Please help me with the solution.
ThanxHello,
I think you are passing orderno to called form as a parameter. If you are using parameter list check..
1. If parameter data is getting in form correctly ?
2. Next, have you changed where clause of other block,so that is will display record with passed orderno ?
I am expecting more details from you.
Thanx
Adi -
Logic to fetch multiple records from BKPF, SRGBTBREL and SOOD
Hi All
Need help in developing a login for a report.
We are trying to display records of a/c documents which have an associated note with them. This involves 4 categories.
1) My Document, I attached the note.
2) My Document, someone else attached the note.
3) No note attached.
4) All.
The logic desired is as below:
1) BKPF-BUKRS + BKPF-BELNR + BKPF-GJAHR = SRGBTBREL-INSTID_A. (SRGBTBREL can have multiple records for this combination if multiple notes attached)
2) a) SOOD-OBJTY = SRGBTBREL-INSTID_B+17(3).
b) SOOD-OBJYR = SRGBTBREL-INSTID_B+20(2).
c) SOOD-OBJNO = SRGBTBREL-INSTID_B+22(12).
Unique combination.
I have fetched the details from the three database tables but finding it challenging to put it across in one output internal table. It doesnu2019t cover the scenario where multiple notes are attached to the document (One can be from the same person who created the document and another ones can be from different person or both from the different people).
Thanks in advance,
HarshCode Snippet Part 2.
* Approved Document.
IF rb_app = 'X'.
CLEAR wa_sood.
* READ TABLE gt_sood INTO wa_sood WITH KEY objtp = lv_objtp
* objyr = lv_objyr
* objno = lv_objno.
LOOP AT gt_sood INTO wa_sood WHERE objtp = lv_objtp
and objyr = lv_objyr
and objno = lv_objno.
* IF sy-subrc = 0.
IF wa_bkpf-usnam <> wa_sood-cronam.
* Company Code.
wa_output-bukrs = wa_bkpf-bukrs.
* A/c Document No.
wa_output-belnr = wa_bkpf-belnr.
* Fiscal Year.
wa_output-gjahr = wa_bkpf-gjahr.
* Document Type.
wa_output-blart = wa_bkpf-blart.
* Document Date.
wa_output-budat = wa_bkpf-budat.
* Day On Which Accounting Document Was Entered.
wa_output-cpudt = wa_bkpf-cpudt.
* User name.
wa_output-usnam = wa_bkpf-usnam.
* Reverse Document Number.
wa_output-stblg = wa_bkpf-stblg.
* Transaction Code.
wa_output-tcode = wa_bkpf-tcode.
* Short description of contents.
wa_output-objdes = wa_sood-objdes.
* Creator Name.
wa_output-cronam = wa_sood-cronam.
* Date created.
wa_output-crdat = wa_sood-crdat.
* Time created.
wa_output-crtim = wa_sood-crtim.
* Status.
WRITE icon_green_light TO wa_output-light.
APPEND wa_output TO gt_output.
* CLEAR: wa_output,
* wa_sood.
* ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
* All Documents.
IF rb_all = 'X'.
* Company Code.
wa_output-bukrs = wa_bkpf-bukrs.
* A/c Document No.
wa_output-belnr = wa_bkpf-belnr.
* Fiscal Year.
wa_output-gjahr = wa_bkpf-gjahr.
* Document Type.
wa_output-blart = wa_bkpf-blart.
* Document Date.
wa_output-budat = wa_bkpf-budat.
* Day On Which Accounting Document Was Entered.
wa_output-cpudt = wa_bkpf-cpudt.
* User name.
wa_output-usnam = wa_bkpf-usnam.
* Reverse Document Number.
wa_output-stblg = wa_bkpf-stblg.
* Transaction Code.
wa_output-tcode = wa_bkpf-tcode.
CLEAR wa_sood.
* READ TABLE gt_sood INTO wa_sood WITH KEY objtp = lv_objtp
* objyr = lv_objyr
* objno = lv_objno.
LOOP AT gt_sood INTO wa_sood WHERE objtp = lv_objtp
and objyr = lv_objyr
and objno = lv_objno.
* ELSE.
IF wa_bkpf-usnam <> wa_sood-cronam.
* Status.
WRITE icon_green_light TO wa_output-light.
* Short description of contents.
wa_output-objdes = wa_sood-objdes.
* Creator Name.
wa_output-cronam = wa_sood-cronam.
* Date created.
wa_output-crdat = wa_sood-crdat.
* Time created.
wa_output-crtim = wa_sood-crtim.
ELSE.
* Status.
WRITE icon_yellow_light TO wa_output-light.
* Short description of contents.
wa_output-objdes = wa_sood-objdes.
* Creator Name.
wa_output-cronam = wa_sood-cronam.
* Date created.
wa_output-crdat = wa_sood-crdat.
* Time created.
wa_output-crtim = wa_sood-crtim.
ENDIF.
* ENDIF.
ENDLOOP.
IF sy-subrc <> 0.
WRITE icon_red_light TO wa_output-light.
ENDIF.
APPEND wa_output TO gt_output.
* CLEAR: wa_output,
* wa_sood.
ENDIF.
ENDLOOP. -
Fetch the records based on number
Hi experts,
I have a req like if user give input as 5..it should fetch 5 records from database.
for example database values are
SERNR MATNR
101 A
102 A
103 A
104 A
105 A
106 A
107 A
If user gives the input as 5 it should fetch 5 records like 101 to 105....Can any body plz help me how to write select query for this..
Thanks in advance,
Veena.
Edited by: s veena on Jan 18, 2011 5:52 AMHi Veena,
You can use UPTO in your select query. For example
SELECT MATNR FROM MARA INTO TABLE IT_MATNR UPTO P_NUMBER ROWS.
"Here P_NUMBER is the Selection Screen Parameter
It will fetch records based on the number in the parameter.
Thanks & Regards,
Faheem. -
Fetch last record from database table
hi,
how to fetch last record from database table.
plz reply earliest.
Regards,
Jyotsna
Moderator message - Please search before asking - post locked
Edited by: Rob Burbank on Dec 11, 2009 9:44 AMabhi,
just imagine the table to be BSEG or FAGLFLEXA... then what would be performance of the code ?
any ways,
jyotsna, first check if you have a pattern to follow like if the primary key field have a increasing number range or it would be great if you find a date field which stores the inserted date or some thing..
you can select max or that field or order by descending using select single.
or get all data.. sort in descending order.(again you need some criteria like date).
read the first entry. using read itab index 1 -
Hi,
I faced up to a 'peculiar' situation with a costly db view.
I attempted to reduce the total view cost
specifically for 223 records fetched{the cost from 149 reduced to 74,
the recursive calls from 796 reduced to 224,
the consistent gets from 311516 reduced to 310341,
the physical reads from 7 reduced to 0}
but the amount of time needed to fetch the results is greater than the old version of the db view....{it may be the double...}
Have you any idea about this...????
Note: I have got fresh statistics...
I use db 10g v.2
Thanks,
SimTry tracing the query and see what tkprofs shows you.
alter session set events '10046 trace name context forever, level 12';
run the query
alter session set events '10046 trace name context off';
Then run tkprofs on the trace file produced to see where the database is spending its time/effort. Do likewise for the baseline query in a different session (so you will generate a different trace file).
If that does not produce anything useful, try using
alter session set events '10053 trace name context forever';
run the query
alter session set events '10053 trace name context off';
Then examine the trace file to see if you can learn anything.
Since you have not given us anything more to go on, that is about all the help I can give.... -
How to fetch the data from Ecc to BI ?
Hi everybody.
Can anyone briefly explain with the screen shots > How to fetch the datasource from RSA5 tcode in ECC to BI? How you replicate there? how the INFO PACKAGE , TRANSFORMATIONS, DTP , DSO, INFO CUBE was created? where we see the catalogs for this data.......THANKS IN ADVANCEHi.
You can follow the below steps to fetch the data from ECC to BI System.
1>Connection should be there between ECC and BW System.
2>Go to Tcode-RSA5 in ECC system and find your data source and then activate it.
3> Go to Tcode-RSA6 in ECC system to check whether your DS is available..if it is there then its been activated.
4>Go to Extract Checker tcode RSA3 and test the data and make sure data is correct.
5>login to BW Side..go to tcode RSA1-->Choose your source system. ECC -> double click on it and you will move to Data source>Select your Application component ex, SD,FI ...>Right click and replicate the Datasouce> Now on refresh you can see the datasource in BI System.
6>Install the related the Infoprovider .. cube or dso ..Connect the datasouurce and create Transformation.
7> Now create infopackage and run it in ful & init mode then do the delta for the new records.
Please refer the below link for more details on extraction.
http://www.trinay.com/SAP%20BW%20Extraction.pdf
Hope this helps.
Br.
Alok -
From two given tables, how do you fetch the values from two columns using values from one column(get values from col.A if col.A is not null and get values from col.B if col.A is null)?
Hi,
Use NVL or COALESCE:
NVL (col_a, col_b)
Returns col_a if col_a is not NULL; otherwise, it returns col_b.
Col_a and col_b must have similar (if not identical) datatypes; for example, if col_a is a DATE, then col_b can be another DATE or it can be a TIMESTAMP, but it can't be a VARCHAR2.
For more about NVL and COALESCE, see the SQL Language manual: http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions119.htm#sthref1310
I hope this answers your question.
If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all tables involved, and also post the results you want from that data.
Explain, using specific examples, how you get those results from that data.
Always say which version of Oracle you're using (e.g., 11.2.0.2.0).
See the forum FAQ: https://forums.oracle.com/message/9362002
Maybe you are looking for
-
SELECT query takes too much time! Y?
Plz find my SELECT query below: select w~mandt wvbeln wposnr wmeins wmatnr wwerks wnetwr wkwmeng wvrkme wmatwa wcharg w~pstyv wposar wprodh wgrkor wantlf wkztlf wlprio wvstel wroute wumvkz wumvkn wabgru wuntto wawahr werdat werzet wfixmg wprctr wvpma
-
JMS Adapter - RFC (Sync ) RFC Repsonse- JMS Adapter
Hello, We have 40K + messages coming in from a 3rd party system through JMS Adapter. We need to process the messages in R/3 using RFC (sync) adapter and send the response back to the 3rd party system with the messageID (CorrelationID) using a JMS
-
I've got a Macbook with a Core 2 Duo 2.0 Ghz processor, 1GB of RAM(memory) and Intel 950 GMA graphics. Visit http://intel.com/products/chipsets/gma950/index.htm and you'll see that the 950 GMA supports up to 224MB of video memory. Apple uses the same
-
Hi people, We've created a XI 3.0 scenario in order to integrate a Java application with MDM First of all, we've configurated a communication channel sender and a communication channel receiver ftp then, we tested the scenario with xmlspy, and when w
-
Hello, I am trying to download a movie "Bronson", I have paid for it and it keeps on saying that there is an unknown error (err-50) and it tells me to check my connection and try again, but as you can see my connection is perfectly normal. Everytime