Skip to content
Advertisement

Update Oracle table column with a sequence number based on varchar field in same table

I am in need of help with the syntax to update an existing field in an oracle table with a new number sequence based on the ordering of another field that is VARCHAR2.

Current Table:

CODE    CODE_ORDER
A00     3
A00.0   4
A00.1   6
A00.9   8

Desired Outcome:

CODE    CODE_ORDER
A00     1
A00.0   2
A00.1   3
A00.9   4

The SELECT statement here gives me the desired results, but when I use it with an UPDATE statement, I receive an error.

UPDATE Table SET code_order = (select row_number() over (order by 
code asc) from Table)

The UPDATE statement displays this error:

ORA-01427: single-row subquery returns more than one row

Thank you in advance for any suggestions.

Advertisement

Answer

You could do this:

merge
into table
using (
  select code,row_number() over (order by code asc) as new_code_order from table
) new_table
on (table.code = new_table.code)
when matched then update set
  table.code_order = new_table.new_code_order

I think this would also work in this simple case:

update (select * from table order by code) set code_order = rownum;
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement