Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: Cursor script hangs in a loop

Re: Cursor script hangs in a loop

From: Bob Cunningham <bcunn_at_oanet.com>
Date: 1998/03/06
Message-ID: <34ff58c9.71464235@news.oanet.com>#1/1

On Wed, 04 Mar 1998 16:56:35 -0800, Jim Lake <jimlake_at_home.com> wrote:

>I am trying to get a PL/SQL script to increment a column in a table. The
>following script is what I have come-up with, but it runs in a loop, and
>is a bear to kill. I have moved the close cursor inside and outside the
>loop, but still the same results. Thanks in advance for any help.
>
>DECLARE
> JIM_COUNTER NUMBER(10) := 0;
> HOLD_REC_KEY NUMBER(10);
> CURSOR COUNT_CURSOR IS
> SELECT REC_KEY FROM TEST_COUNTER FOR UPDATE OF REC_KEY;
>BEGIN
> LOOP
> OPEN COUNT_CURSOR;
> FETCH COUNT_CURSOR INTO HOLD_REC_KEY;
> IF COUNT_CURSOR%FOUND THEN
> JIM_COUNTER := JIM_COUNTER + 1;
> UPDATE TEST_COUNTER SET REC_KEY = JIM_COUNTER;
> ELSE
> EXIT;
> END IF;
> CLOSE COUNT_CURSOR;
> END LOOP;
>COMMIT;
>END;
>

Adjust your PL/SQL block slightly to eliminate the infinite loop:

DECLARE
 JIM_COUNTER NUMBER(10) := 0;
 HOLD_REC_KEY NUMBER(10);
 CURSOR COUNT_CURSOR IS
  SELECT REC_KEY FROM TEST_COUNTER FOR UPDATE OF REC_KEY; BEGIN
 OPEN COUNT_CURSOR;
 LOOP
   FETCH COUNT_CURSOR INTO HOLD_REC_KEY;    EXIT WHEN COUNT_CURSOR%NOTFOUND
   JIM_COUNTER := JIM_COUNTER + 1;
   UPDATE TEST_COUNTER
      SET REC_KEY = JIM_COUNTER
    WHERE CURRENT OF COUNT_CURSOR;
 END LOOP;
 CLOSE COUNT_CURSOR;
 COMMIT;
END; An alternative to perform the same task:

BEGIN
   UPDATE TEST_COUNTER
      SET REC_KEY = REC_KEY + 1;
   COMMIT;
END; Bob Cunningham
bcunn_at_oanet.com Received on Fri Mar 06 1998 - 00:00:00 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US