Oracle: Updating a table column using ROWNUM in conjunction with ORDER BY clause Oracle: Updating a table column using ROWNUM in conjunction with ORDER BY clause oracle oracle

Oracle: Updating a table column using ROWNUM in conjunction with ORDER BY clause


This should work (works for me)

update table_a outer set sequence_column = (    select rnum from (           -- evaluate row_number() for all rows ordered by your columns           -- BEFORE updating those values into table_a           select id, row_number() over (order by column1, column2) rnum             from table_a) inner     -- join on the primary key to be sure you'll only get one value    -- for rnum    where inner.id = outer.id);

OR you use the MERGE statement. Something like this.

merge into table_a uusing (  select id, row_number() over (order by column1, column2) rnum   from table_a) son (u.id = s.id)when matched then update set u.sequence_column = s.rnum


 UPDATE table_a     SET sequence_column = (select rn                              from (                                select rowid,                                       row_number() over (order by col1, col2)                                from table_a                            ) x                            where x.rowid = table_a.rowid)

But that won't be very fast and as Damien pointed out, you have to re-run this statement each time you change data in that table.


First Create a sequence :

CREATE SEQUENCE SEQ_SLNO  START WITH 1  MAXVALUE 999999999999999999999999999  MINVALUE 1  NOCYCLE  NOCACHE  NOORDER;

after that Update the table using the sequence:

UPDATE table_nameSET colun_name = SEQ_SLNO.NEXTVAL;