2

データベースのバージョン: Oracle 11gr2、私のテーブルは次のようなものです:

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

私の予想される更新は次のようなものです:

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

ただし、更新ビューでは分析関数は使用できません。

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

間違いなく、ORA-01732 が発生します。更新クエリを入力するにはどうすればよいですか?

4

2 に答える 2

1

これを試して

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  )
于 2012-08-13T08:19:03.607 に答える
0

このソリューションはテストされていません。マイナーな変更が必要になる場合があります。

プロシージャの作成または置換 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;
于 2012-08-13T08:18:51.083 に答える