Search code examples
oracle11gr2rownum

update set row value by rownum in oracle


Database version:oracle 11gr2, my table is like:

create table t_test(t_id    number,t_value number)
insert into t_test (t_id) values (1);
insert into t_test (t_id) values (2);
insert into t_test (t_id) values (6);
insert into t_test (t_id) values (10);
insert into t_test (t_id) values (3);

t_id  t_value
 1      null
 2      null
 6      null
 10     null
 3      null

My expecting update is like:

select t.t_id,row_number() over (order by t.t_id) 
from t_test t

t_id  row_number() over (order by t.t_id) 
 1      1
 2      2
 6      4
 10     5
 3      3

But analytic function is not allowed in update view:

update
(select t.value,row_number() over (order by t.t_id) rn
from t_test t)
set value=rn

Without no doubt,it causes ORA-01732. How do I put my update query?


Solution

  • Try this

    update  t_test 
    set t_value = ( select rn  
                       from ( select i.t_id, row_number()  over (order by i.t_id) rn  
                              from t_test i) tab 
                        where tab.t_id= t_test.t_id  )