Hi!

You could easily use rownum for doing this kind of update... Just do a
commit after each update.

SQL> create table u (a number);

Table created.

SQL> alter table u modify a constraint un not null;

Table altered.

SQL> insert into u values (0);

1 row created.

SQL> insert into u values (0);

1 row created.

SQL> insert into u values (0);

1 row created.

SQL> insert into u values (0);

1 row created.

SQL> insert into u values (0);

1 row created.

SQL> commit;

Commit complete.

SQL> update u set a = 1 where a = 0 and rownum <= 2;

2 rows updated.

SQL> update u set a = 1 where a = 0 and rownum <= 2;

2 rows updated.

SQL> update u set a = 1 where a = 0 and rownum <= 2;

1 row updated.

SQL> update u set a = 1 where a = 0 and rownum <= 2;

0 rows updated.

SQL>

Tanel.

----- Original Message -----
To: "Multiple recipients of list ORACLE-L" <[EMAIL PROTECTED]>
Sent: Wednesday, July 09, 2003 2:09 AM


> I have a table of about one million records.
>
> About 100,000  of them have a flag which I need it set to 0.
>
> Because of the size of the rollback segment, I cannot
> update them all and then commit, I need to do it in
> sets of 1000 records.
>
> Do I need a cursor for this?
>
> I had something like that:
> DECLARE
>       I  BINARY_INTEGER;
>
>
> Cursor  MyCursor  IS
>          SELECT   *
>          FROM     (Table_Name)
>          WHERE    (Condition)
>          FOR UPDATE;
>
> BEGIN
>       I := 0;
>       FOR MyRec IN MyCursor LOOP
>             UPDATE (Table_name)
>     SET delete_flag = 1
>     WHERE CURRENT OF MyCursor;
>
>             I := I + 1;
>             IF MOD(I, 1000) = 0 THEN
>                 COMMIT;
>             END IF;
>
>      END LOOP;
> END;
> /
>
> But "FOR UPDATE" does not really work well, and at the 1000th record
> when it reaches the commit, its dropping out of the loop.
>
> Can I use ROWNUM to update them in batches of 1000 per time?
>
> Thanks,
> maa
>
> --
> Please see the official ORACLE-L FAQ: http://www.orafaq.net
> --
> Author: Maryann Atkinson
>   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).
>
>


-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Tanel Poder
  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