PL/SQL Cursor For Loop with Bulk Collect and Limit
Here is an cursor example of how to use a BULK COLLECT
with a LIMIT
clause.
DevNote: %NOTFOUND
check must be at the end of the loop
declare PROCEDURE bulk_with_limit ( n_start_in IN CONTRACT.CONTRACT_ID%TYPE, n_end_in IN CONTRACT.CONTRACT_ID%TYPE, limit_in IN PLS_INTEGER := 100 ) IS CURSOR contracts_cur IS SELECT * FROM contract WHERE contract_id between n_start_in and n_end_in; TYPE contract_trec IS TABLE OF contracts_cur%ROWTYPE INDEX BY PLS_INTEGER; l_contracts contract_trec; BEGIN OPEN contracts_cur; LOOP FETCH contracts_cur BULK COLLECT INTO l_contracts LIMIT limit_in; -- Perform business logic ... FOR i IN 1 .. l_contracts.COUNT LOOP dbms_output.put_line(lpad(' ',5 - length(i))||i||' : '||l_contracts(i).contract_id); END LOOP; -- DevNote: %NOTFOUND check must be at the end of the loop EXIT WHEN contracts_cur%NOTFOUND; END LOOP; CLOSE contracts_cur; END bulk_with_limit; begin bulk_with_limit(n_start_in => 10, n_end_in => 100000, limit_in => 100); end;
3 comments:
http://jasonvogel.blogspot.com/2006/11/plsql-join-convert-multiple-returned.html?showComment=1242914171853#c1027413500840209600
Thanks for sharing this idea. BTW, how can I set up the code widget as shown in your blog?
- Denis
Take a look at http://jasonvogel.blogspot.com/2009/01/syntax-highlighting-posted-code.html
Post a Comment