Question

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?

Was it helpful?

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  )

OTHER TIPS

THIS SOLUTION is not tested may need some minor changes !

CREATE OR REPLACE PROCEDURE SOME_PROC

BEGIN
 FOR C IN ( select t.value,row_number() over (order by t.t_id) rn
            from t_test t)

 LOOP
     BEGIN 
      UPDATE T_TEST
           SET
           T_VALUE=C.RN;
     END;

END;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top