Bulk Collect and Limit Rows
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