How to fetch n rows at a time?
I know that I can use the rownum function to return n rows at a time, but the rownum function will be applied after all rows are returned by the query, which is bad for performance since my table has lot of rows. What I need is really to fetch n rows at a time from the DB.
Regards
I am not sure what you mean by "the rownum function will be applied after all rows are returned by the query", but that appears to be an incorrect statement. If you have a ROWNUM limit in a query, Oracle knows that it only has to fetch the first M rows.
If you are looking for an ability to page through query results, there is an AskTom thread on pagination in SQL.
This would only be appropriate, though, if you expect that users will only ever want the first few pages of results (i.e. users of Google aren't going to look through every page of results for generic search terms, they are going to look at page 1, maybe page 2 and page 3, and then stop). If the application is going to process all the rows that the query returns, you'd need some other construct and we would need some additional requirements. Your client application can probably fetch N rows at a time. If the client is PL/SQL, a BULK COLLECT with a LIMIT clause may also be appropriate.
Justin
Similar Messages
-
How to fetch indivdual rows from a dynamic query.
Hi,
I wish to fetch the individual rows returned from a dynamic query.
if my dynamic query is:
dyn_stmt := select col1, col2, col3
from tab1;
The query returns multiple rows.
Then how to fetch individual rows of this query ?
Please explain.declare
cur_test sys_refcursor;
c1 varchar2(30);
c2 number;
c3 date;
begin
dyn_stmt := select col1, col2, col3 from tab1;
OPEN cur_test FOR dyn_stmt;
LOOP
FETCH cur_test INTO c1, c2, c3;
IF cur_test%NOTFOUND THEN
EXIT;
END IF;
-- Process this row
END LOOP;
CLOSE cur_test;
END; -
How to get multiple rows at one time in a table?
hi
I have a JTable bound with ViewObject and i use multiple selection mode setting to get selection row.
My question is when i select more then one row at one time i only can get those index from JTable but can't get those rows from ViewObject.is it possible to get rows from ViewObject? or how to use JTable row index to get row from ViewObject?repost
-
How to fetch a row with maximum rownum
In my sql query, how can i fetch the row with max row count? the query has around 10 columns.
Thank You
KKHi,
It's not very clear what you want.
It sounds like you want a Top=-N Query , perhaps like this:
WITH got_row_cnt AS
SELECT job
, COUNT (*) AS row_cnt
-- , ... -- other columns
, RANK () OVER (ORDER BY COUNT (*) DESC) AS rnk
FROM scott.emp
GROUP BY job
SELECT * -- or list all columns except rnk
FROM got_row_cnt
WHERE rnk = 1
Whenever you have a problem, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) from all tables involved.
Also post the results you want from that data, and an explanation of how you get those results from that data, with specific examples.
Always say which version of Oracle you're using (for example, 11.2.0.2.0).
See the forum FAQ {message:id=9360002} -
How to display the rows number of times by giving the column values?
Hi All,
I want to display the rows number of times as the value exists in num column in the below query
with t AS
( SELECT 'venkatesh' NAME, 'hyd' LOC, 2 NUM FROM DUAL
UNION ALL
SELECT 'prasad' NAME, 'hyd' LOC, 3 NUM FROM DUAL
UNION ALL
SELECT 'krishna' NAME, 'hyd' LOC, 1 NUM FROM DUAL )
SELECT T.* FROM T
CONNECT BY ROWNUM <= NUM
Expected output:
venkatesh hyd 2
venkatesh hyd 2
prasad hyd 3
prasad hyd 3
prasad hyd 3
krishna hyd 1Edited by: Nag Aswadhati on Nov 1, 2012 12:34 AMNag Aswadhati wrote:
Hi All,
I want to display the rows number of times as the value exists in num column in the below query
Expected output:
venkatesh hyd 2
venkatesh hyd 2
prasad hyd 3
prasad hyd 3
prasad hyd 3
krishna hyd 1Using Connect By:-
with t AS
( SELECT 'venkatesh' NAME, 'hyd' LOC, 2 NUM FROM DUAL
UNION ALL
SELECT 'prasad' NAME, 'hyd' LOC, 3 NUM FROM DUAL
UNION ALL
select 'krishna' name, 'hyd' loc, 1 num from dual )
select t.name, t.loc
from t
connect by level <= num
and name = prior name
and (prior sys_guid() is not null);
NAME LOC
krishna hyd
prasad hyd
prasad hyd
prasad hyd
venkatesh hyd
venkatesh hyd
6 rows selected -
How to insert 10 rows at a time in the oracle
how ti insert r update 10 query at a time in the oracle
You can do a small test to find it out.
SQL> set serveroutput on
SQL> drop table t
2 /
Table dropped.
SQL> drop table s
2 /
Table dropped.
SQL> create table s(no integer, name varchar2(4000))
2 /
Table created.
SQL> create table t(no integer, name varchar2(4000))
2 /
Table created.
SQL> insert into s
2 select level, rpad('*',4000,'*')
3 from dual
4 connect by level <= 10000
5 /
10000 rows created.
SQL> commit
2 /
Commit complete.
SQL> declare
2 ltime integer;
3 begin
4 ltime := dbms_utility.get_time;
5
6 for i in (select * from s)
7 loop
8 insert into t(no, name) values(i.no,i.name);
9 end loop;
10
11 ltime := dbms_utility.get_time - ltime;
12
13 dbms_output.put_line('Exec Time:'||ltime/100||' Seconds...');
14 commit;
15 end;
16 /
Exec Time:17.22 Seconds...
PL/SQL procedure successfully completed.
SQL> truncate table t
2 /
Table truncated.
SQL> declare
2 type my_type is table of s%rowtype;
3 lType my_type;
4 ltime integer;
5 begin
6 ltime := dbms_utility.get_time;
7
8 select * bulk collect into lType from s;
9
10 forall i in 1..lType.count
11 insert into t values lType(i);
12
13 ltime := dbms_utility.get_time - ltime;
14
15 dbms_output.put_line('Exec Time:'||ltime/100||' Seconds...');
16
17 commit;
18 end;
19 /
Exec Time:6.27 Seconds...
PL/SQL procedure successfully completed.
SQL> truncate table t
2 /
Table truncated.
SQL> declare
2 ltime integer;
3 begin
4 ltime := dbms_utility.get_time;
5
6 insert into t select * from s;
7
8 ltime := dbms_utility.get_time - ltime;
9
10 dbms_output.put_line('Exec Time:'||ltime/100||' Seconds...');
11
12 commit;
13 end;
14 /
Exec Time:3.26 Seconds...
PL/SQL procedure successfully completed.Thanks,
Karthick. -
How to fetch n records at a time from a FM and then fetch next n records
I have a report program which is calling a function module . This function module returns all the records from a table. As the table has millions of records, it cant be returned at a time. How can we return N records from a function module and then return Next n records .The Function module and the report program are in different system .
Thanks in Advance.Use open cursor and fetch cursor.
Check the program as in SAP Help.
DATA: BEGIN OF count_line,
carrid TYPE spfli-carrid,
count TYPE i,
END OF count_line,
spfli_tab TYPE TABLE OF spfli.
DATA: dbcur1 TYPE cursor,
dbcur2 TYPE cursor.
OPEN CURSOR dbcur1 FOR
SELECT carrid count(*) AS count
FROM spfli
GROUP BY carrid
ORDER BY carrid.
OPEN CURSOR dbcur2 FOR
SELECT *
FROM spfli
ORDER BY carrid.
DO.
FETCH NEXT CURSOR dbcur1 INTO count_line.
IF sy-subrc <> 0.
EXIT.
ENDIF.
FETCH NEXT CURSOR dbcur2
INTO TABLE spfli_tab PACKAGE SIZE count_line-count.
ENDDO.
CLOSE CURSOR: dbcur1,
dbcur2.
Regards
Kannaiah -
How to Fetch the Row value in SBO Formatted search
Hi Experts,
I have created a Sales order, in which i have 4 UDF Fields(A,B,C,D) in the following:
Example values:
A B C D
2 2 4 4
3 2 6 10
C=A*B
D=1st value of D + 2nd col value of C
i have written query for C, but how to write the Formatted search Query for generation of D values. plz reply as soon as possible.Magesh,
I quite understand what you are trying to do. If you look at the example below I added a third row to show how you want the D to be a running total of column C. RIGHT !!
A B C D
2 2 4 4
3 2 6 10
<b>4 2 8 18</b>
Honestly, it is not going to be simple as you do not have a way in SBO to access a particular column from a row. When you say $[$38.U_C] it refers to the context row OR the row which has the highlight OR the row which has the curson on it.
It is not possible to say $[$38.U_C from row 2] JUST NOT POSSIBLE ...
You have to write a tricky code by using a temp table referencing the value of column C. Also you have to keep track if Rows gets deleted and a new row added.
I will test a sample code and will come back.
Suda -
How to Fetch Customer information at the time of Order Import- Urgent
We have a requirement to Interface data from 2 different systems.
Booking and Order Information data will come from ----Source 1
Customer information will come from -----Source 2
The only Primary key that will be common is the an attribute like 'Customer_ID' that will be sent from 'Source 1.'
Now in Oracle- we need to Import all of the Booking and Order information from Source 1 and also based on the Customer_ID from Source 1 we need to pull Customer address, contact and name details and also the Payment terms that would already be created in TCA before the Order is imported from Source 1.
How will Order Import know to fetch the details of Customer attributes that are required to go into an Oracle Order. (Such as Address, contact details, customer name) - All these need to be pulled usin Customer_ID.As long as customer is defined in oracle, all you need to pass to the order interface tables is the customer_number( or customer_id).
The order import itself will pull some information such as customer name automatically.
However, your custom code that puts data in the interface table should query up the customer site records / contact records and put the data in the interface table before launching the Order Import.
Hope this helps,
Sandeep Gandhi -
How to fetch single row data into multiple columns
Hi Have a cursor
which will have SELECT Sun_hrs,Mon_hrs,Tue_hrs,Wed_hrs,Thu_hrs,Fri_hrs,Sat_hrs from OTMaster;
now my cursor has one row of the above columns with this row data I want to insert into other tale as column wise
ex:
my row is like this: Sun_hrs,Mon_hrs,Tue_hrs,Wed_hrs,Thu_hrs,Fri_hrs,Sat_hrs
01:00 01:00 01:00 01:00 01:00 01:00 01:00
now I want to insert the above data into table with loop along with weekday
weekday, OTHrs
1 01:00
2 01:00
3 01:00
4 01:00
5 01:00
6 01:00
7 01:00
which type of variable I need to fetch the records, rowtype or tabletype,
plz help methank you for information, and now I am using UNPIVOT below is my query
SELECT * FROM OTCEILINGMASTER
UNPIVOT(OTHOURS FOR WEEK_DAY IN (SUN_CEILING_HRS AS '1',MON_CEILING_HRS AS '2',TUE_CEILING_HRS AS '3',
WED_CEILING_HRS AS '4',THU_CEILING_HRS AS '5',FRI_CEILING_HRS AS '6',SAT_CEILING_HRS AS '7'));
when I am selecting all the columns (select * from OTCEILINGMASTER) then only the above query is executing I want only two columns from the table however my table has 10 columns.
please looking into this -
Hi,
I have written a CQL query with rows 3 records. In that query is it possible to fetch first record and last record specific field values.
for example,
Column: c1, c2, c3
record1: id1, 2.3, 3.5
record2: id2, 2.3, 3.6
record3: id21, 2.3, 3.7
record3: id25, 2.3, 3.9
I need to get moving average of three rows of c3 and get first record id and last record ids.
output1: id1, id1, avg(c3)=3.5
output2: id1, id2, avg(c3)=3.55
output3: id1, id21, avg(c3)=3.6
output4: id2, id25, avg(c3)=3.733
Please help on above.
Thanks,
SriI have one more question.
The average output is given as input to pattern match processor.
The double differentiation differentiation of first 2 average input data in CQL pattern match is written as:
<view id="FetchRows">
<![CDATA[ istream(select * from mdepthChannel)
]]>
</view>
<query id="ExampleQuery">
<![CDATA[ select *
from FetchRows
MATCH_RECOGNIZE (
Measures
v1.wellUid as wellUid,
v1.arrivalTime as arrivalTime,
v1.wellboreUid as wellboreUid,
v1.mdepthAverage as mdepthAverage,
v1.wopAverage as wopAverage,
v2.mdepthAverage as v2mdepthAverage,
v2.wopAverage as v2wopAverage,
v3.mdepthAverage as v3mdepthAverage,
v3.wopAverage as v3wopAverage,
getCalculateDerivative(v2.mdepthAverage,getCalculateDerivative(v1.mdepthAverage,v1.wopAverage,v2.mdepthAverage,v2.wopAverage),v3.mdepthAverage,getCalculateDerivative(v2.mdepthAverage,v2.wopAverage,v3.mdepthAverage,v3.wopAverage)) as derValue
ALL MATCHES
PATTERN (v1 v2 v3)
DEFINE
v3 as (getCalculateDerivative(v2.mdepthAverage,getCalculateDerivative(v1.mdepthAverage,v1.wopAverage,v2.mdepthAverage,v2.wopAverage),v3.mdepthAverage,getCalculateDerivative(v2.mdepthAverage,v2.wopAverage,v3.mdepthAverage,v3.wopAverage)) <= 0.0)
) as T
]]>
</query>
Where "getCalculateDerivative" is the java function returns slope of straight line.
The output of this query returns correct data till 7th record after that it repeats 6nd record.
That 8th record is the same as 6th record data.
Why that 8th record is the 6nd record repeats.
The desired output is same as input record if pattern matches.
Please help on this.
Thanks,
Sri
Edited by: 897694 on Mar 27, 2012 2:15 AM -
With dynamic CreateViewObject How To "Navigate N rows at a time using DataTags" fails
I have worked with the example on this link:
http://otn.oracle.com/docs/products/jdev/howtos/jsp/traverse_n.ht
ml
It works fine in case I am using the View Object created in the
Package as the example is using.
However, this sample does not navigate; through record as
expected and keep displaying same records, when I create dynamic
view using CreateViewObject tag like this:
<jbo:CreateViewObject appid="TravelPkgModule" name="test">
select vc_comp_code,vc_voucher_no from hd_travel_voucher
</jbo:CreateViewObject
Help me in navigating with dynamic view objects.moreover,
suppose total records in a set are = 100
and range size = 10
on first click on next set, records from 1 to 10 are displayed.
on second click on next set, records from 11 to 20 are displayed.
on third or N'th click on next set, records from 11 to 20 are
displayed and not from 21 onwards are displayed.
Code attached.
<%@ page errorPage="errorpage.jsp"
contentType="text/html;charset=WINDOWS-1252"
import="java.util.*,java.text.*" %>
<%@ page contentType="text/html;charset=WINDOWS-1252"%>
<HTML>
<BODY>
<%@ taglib uri="/webapp/DataTags.tld" prefix="jbo" %>
<jbo:ApplicationModule
configname="TravelPkg.TravelPkgModule.TravelPkgModuleLocal"
id="TravelPkgModule" username="ebiz" password="ebiz" />
<jbo:DataSource id="Qvoucher" appid="TravelPkgModule"
viewobject="HdTravelVoucherView" rangesize="2">
</jbo:DataSource>
<%
%>
Next Set
Previous Set
<table border="1">
<%
oracle.jbo.RowSet rs = Qvoucher.getRowSet(); // see if we have
a navigation command
if(request.getParameter("nav") != null)
String sNavigation = request.getParameter("nav");
if(sNavigation.equalsIgnoreCase("nextset"))
%>kiran = <%
rs.scrollRange(rs.getRangeSize());
else
rs.scrollRange(-rs.getRangeSize());
oracle.jbo.Row rows[] = rs.getAllRowsInRange();
for(int i = 0; i < rows.length; i++)
rs.setCurrentRow(rows);%>
<tr><td>
<jbo:ShowValue datasource="Qvoucher"
dataitem="VcEmpCode"></jbo:ShowValue></td>
<td><jbo:ShowValue datasource="Qvoucher"
dataitem="VcVoucherNo"></jbo:ShowValue></td>
<% }%>
LENGHT = <%=rows.length%>
</table></BODY></HTML>
<jbo:ReleasePageResources releasemode="Reserved" /> -
How to fetch some certain records at a time
Hi everyone,
I dont know how to fetch some records at a time,
for some reason,there is not enouht memory.so I cant
fethch all the records at a time.
example, every time I only want to fetch 10
records. Does anyone know that?
thanks
KrussiI think you may be getting setFetchSize(int) and setMaxRows(int) confused. I may have added to the confusion with my breaking out of the loop comment.
setFetchSize(int) gives the driver a hint as to how many rows it should store in memory at a time internally, ie. within the driver. It has no real effect on how you write your program at all. Its only purpose is to limit memory usage by the driver. To limit the rows returned, use setMaxRows.
For example, assume a result set has 20 rows and you use:
rs.setFetchSize(5);
while (rs.next()) {
System.out.println("Rows: " + (++count));
} You still get a count from 1 to 20. However, internally the driver is only holding in memory 5 records at a time, after the 5 returned it will discard those and get the next 5. So instead of holding 20 rows, its only holding 5 at a time. If you change rs.setFetchSize(5) to rs.setMaxRows(5) you will only get a count from 1 to 5, the rest are silently discared and rs.next() returns false.
Check your documentation to see if your driver supports the method. I believe many drivers don't. If not, I believe there is no way around multiple queries. Even if there is no rowid, as long as you order your queries you should be able to start again where you left off.
Disclaimer: Both drivers I commonly use do not implement setFetchSize(int). Someone let me know if I've fudged something here.
Good Luck -
Procedure to delete mutiple table records with 1000 rows at a time
Hello Champs,
I am having requirement to create procedure to achive the deletes from 5 big tables. 1 master table and 4 child tables. Each table has 28 millions records. Now I have to schedule a procedure to run it on daily basis to delete approximately 500k records from each tables. But the condition is: Seperate procedures for each tables and delete only 1000 rows at a time. The plan is below. Since I am new for writing complicate procedure, I don't have much idea how to code the procedures, can some one help me to design the procedure queries. Many Thanks
1. Fetch 1000 rows from master table with where clause condition.
2. Match them with each child tables and delete the records.
3. Atlast delete those 1000 rows from master table.
4. over all commit for all 5 X 1000 records.
5. Repeat the steps 1 to 4 till no rows to fetch from master table.
Below are detailed procedure plan:----
----- Main procedure to fetch 1000 rows at a time and providing them as input to 5 different procedures to delete records, repeating same steps till no rows to fetch i.e. (i=0)-----
Create procedure fetch_record_from_master_table:
loop
i = Select column1 from mastertable where <somecondition> and rowcount <= 1000;
call procedure 1 and i rows as input;
call procedure 2 and i rows as input;
call procedure 3 and i rows as input;
call procedure 4 and i rows as input;
call procedure 5 and i rows as input;
commit;
exit when i=0
end loop;
----- Sepereate procedure's to delete records from each child tables------
Create procedure 1 with input:
delete from child_table1 where column1=input rows of master table;
Create procedure 2 with input:
delete from child_table2 where column1=input rows of master table;
Create procedure 3 with input:
delete from child_table3 where column1=input rows of master table;
Create procedure 4 with input:
delete from child_table4 where column1=input rows of master table;
--- procedure to delete records from master table atlast----
Create procedure 5 with input:
delete from Master_table where column1=input rows of master table;Oops, but this will work, won't it?
begin
execute immediate 'truncate table child_table1';
execute immediate ' truncate table child_table2';
execute immediate ' truncate table child_table3';
execute immediate ' truncate table child_table4';
for r_fk in ( select table_name, constraint_name
from user_constraints
where table_name = 'MASTER_TABLE'
and constraint_type = 'R'
loop
execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' DISABLE';
end loop;
execute immediate ' truncate table master_table';
for r_fk in ( select table_name, constraint_name
from user_constraints
where table_name = 'MASTER_TABLE'
and constraint_type = 'R'
loop
execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' ENABLE';
end loop;
end;
/ Or
truncate table child_table1;
truncate table child_table2;
truncate table child_table3;
truncate table child_table4;
begin
for r_fk in ( select table_name, constraint_name
from user_constraints
where table_name = 'MASTER_TABLE'
and constraint_type = 'R'
loop
execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' DISABLE';
end loop;
end;
truncate table master_table;
begin
for r_fk in ( select table_name, constraint_name
from user_constraints
where table_name = 'MASTER_TABLE'
and constraint_type = 'R'
loop
execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' ENABLE';
end loop;
end;
/ -
How to update multiple rows in one query using php
i am new to this can any one help me how to update multiple rows at a time i am doing an school attendance page
Often the situation is such that you have multiple courses across a range of dates.So students may take more than one course, and you need to track attendance for each course date. The following graphic demonstrates this:
In such a situation, you need four database tables as follows:
students (student_id, student_name, etc.)
courses (course_id, course_name, etc.)
students_courses (student_id, course_id)
attendance (student_id, course_id, dater)
A fifth table may also be needed to define the dates of courses, but you may also be able to build this array programmatically by using PHP's robust date functions, which can give you, for instance, all the Tuesdays and Thursdays between a start date and end date.
The students_courses table simply keeps track of which students are taking which courses, so it has just two columns for the primary keys of both of the main tables. The attendance table is similar, but it also includes a date field. The following view of the attendance table demonstrates this:
So if David's solution does cover your needs, consider yourself lucky, because this could quickly grow from a beginner-appropriate project to a moderately advanced one.
Maybe you are looking for
-
Cannot attach documents at order operation level in PM order.
Hi, We have recently upgraded to EHP6 and I have activated the EAM business functions including LOG_EAM_CI_6. In my PM work order, on the Additional Data tab, I can see the "Document Assignment" section at the bottom. Here I attach an existing docume
-
When I have a bullet point list in Word, after pressing enter the next bullet point won't show up until I start typing. Is there anyway to change it so the bullet appears as soon as I press enter?
-
Sdo_aggr_union core dump on 11.1
I am using the spatial features of Oracle 11.1 and I have run into a bug that causes the instance to core dump. I am wondering if anyone could help me sort out the problem. I can send the data in the table and the full trace file to anyone interested
-
since i got the new ios 5.1 on my i4 imessage doesnt work with other iphones, for example, my boyfriend send me and imessage and i get it as it email address and when i try to send him one, it goes as text!!, i dont understand.... this has been happe
-
Chapter markers won't work when Blu-ray Disc burned
I just burned a Blu-ray Disc directly in FCP7 (using Sharing). My 5 chapter markers are nowhere to be found when I play the disc back in my player. What happened? I don't want the chapter markers as subtitles -- simply want them to work as chapter ma