Kurt:

It appears that you are committing inside the loop in the same inner block
that the update is in.  The commit is freeing up the rows. I find it a good
practice sometimes to do commits inside the inner block like that, on long
transactions.


============================================================================================================

Reginald W. Bailey
Your Friendly Neighborhood DBA
============================================================================================================


                                                                                       
                                        
                    [EMAIL PROTECTED]                                                  
                                           
                    WUSA.COM             To:     [EMAIL PROTECTED]                     
                                     
                    Sent by:             cc:                                           
                                        
                    [EMAIL PROTECTED]       Subject:     PL/SQL- cursors and commits   
                                           
                    om                                                                 
                                        
                                                                                       
                                        
                                                                                       
                                        
                    04/04/2003                                                         
                                        
                    08:39 AM                                                           
                                        
                    Please respond                                                     
                                        
                    to ORACLE-L                                                        
                                        
                                                                                       
                                        
                                                                                       
                                        






I've been 'experimenting' with the following code in 8.1.5 and it seems to
work fine.� However,
my "ORACLE PL/SQL" book from O'REILLY (Steven Feuerstein Bill Pribyl 1997)
leads me to
believe that it should not work.� They state "As soon as a cursor with a
FOR UPDATE is OPENed,
all rows...are locked. When [a COMMIT]..occurs, the locks...are released.
As a result, you
cannot execute another FETCH against a FOR UPDATE cursor after you
COMMIT......"� They
go further to suggest an ORA-01002 would be returned.

Any comments? Thanks.

Kurt Wiegand
[EMAIL PROTECTED]

declare
� local_f1 ctest.f1%TYPE := 0;
� local_f2 ctest.f2%TYPE := 0;
� batch_count number(6) := 0;
� cursor c_select is
� select f1,f2 from ctest
� for update;

begin
� open c_select;
� loop
����� fetch c_select
������������� into local_f1,
�������������������� local_f2;
����� exit when c_select%NOTFOUND;
����� update ctest
���������������� set f2 = f2 + 1
���������������� where current of c_select;

���� batch_count := batch_count + 1;

���� if batch_count > 99 then
������� batch_count := 0;
������� commit;
���� end if;

� end loop;
� close c_select;
� commit;
end;




-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: 
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to