Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Bulk Collect and Limit Rows

MadWorldJan 1 2009 — edited Jan 2 2009
Hello Oracles,

I am experiencing a strange behaviour (at least to me) with BULK COLLECT and LIMIT rows.
For test purposes, I wrote a procedure that uses an explicit AND implicit CURSOR.
When I use the explicit CURSOR and LOOP I use BULK COLLECT and LIMIT rows.
I do not limit ROWNUM with my SELECT INTO . I know for a fact ROWNUM works fine since the last millenium.
When I look at the number of rows returned when I set the LIMIT, I get bizarre number of fetches...

I fetch in an INDEX-BY TABLE which is based on a RECORD TYPE.
Below are some results with different LIMIT values for a small group of PRIMARY KEYs.
The counts below are the value of my_table .COUNT

Any insight would be apreciated.

thx

. .
PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 78 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 78 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 78 retrieves : 27
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 78 retrieves : 37
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 78 retrieves : 47

*************************************************
PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 100 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 100 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 100 retrieves : 83
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 100 retrieves : 93
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 100 retrieves : 93

*************************************************

PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 140 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 140 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 140 retrieves : 43
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 140 retrieves : 53
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 140 retrieves : 33

*************************************************
PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 183 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 183 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 183 retrieves : 0
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 183 retrieves : 10
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 183 retrieves : 44

*************************************************

PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 200 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 200 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 200 retrieves : 183
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 200 retrieves : 193
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 200 retrieves : 193

*************************************************

PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 600 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 600 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 600 retrieves : 183
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 600 retrieves : 193
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 600 retrieves : 593

*************************************************
PK 470553 EXPLICIT CURSOR Actual Count = 17
. LOOP BULK COLLECT LIMIT 593 retrieves : 17
.
PK 100991 EXPLICIT CURSOR Actual Count = 38
. LOOP BULK COLLECT LIMIT 593 retrieves : 38
.
PK 100981 EXPLICIT CURSOR Actual Count = 183
. LOOP BULK COLLECT LIMIT 593 retrieves : 183
.
PK 101001 EXPLICIT CURSOR Actual Count = 193
. LOOP BULK COLLECT LIMIT 593 retrieves : 193
.
PK 101033 EXPLICIT CURSOR Actual Count = 593
. LOOP BULK COLLECT LIMIT 593 retrieves : 0

PL/SQL procedure successfully completed.

SQL> spool off
This post has been answered by Rob van Wijk on Jan 2 2009
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jan 30 2009
Added on Jan 1 2009
6 comments
1,301 views