2016-08-05 12 views
0

idsが順番に増加するOracle SQLにはテーブルがありますが、編集のためにidsにギャップがあります。 IDSは、現在、私は1つのポストをチェックして、提供される解決策は以下の通りだったレコードを順番に更新するためのOracleの更新クエリ

22 
23 
24 
32 
33 
44 
...etc 

のようなものです:

update (select t.*, row_number() over (order by id) as newid) toupdate 
    set id = newid 

Solution Provided earlier.

私のクエリ: 1)私は、「FROM句を推測"上記のクエリで見つからない。

更新クエリ:

update (select t.*, 
       row_number() over (order by emp_id) as newid 
     from employee t) toupdate 
set emp_id = newid; 

2)私は上記のクエリを実行すると、それは私にエラー「このビュー上の法的ていないデータ操作オペレーション」を提供します。

ここで説明したソリューションがどのように機能するか説明することはできません。誰でも完全な更新クエリを投稿できますか?ありがとう。

update employee set emp_id = (
    with tab as (
    select emp_id, rownum r 
    from (select emp_id from employee order by emp_id) 
) 
    select r from tab where employee.emp_id = tab.emp_id 
); 

動作します:あなたはそれを行う方法を示していますを参照し、同じ質問に対する

+0

:他のユニークな列が存在しない場合は、rowidを使用することができますか?また、なぜNumberを重視するのか?逐次であることは本当に重要ですか? https://community.oracle.com/thread/2485143?start=0&tstart=0 –

+1

@RegencySoftware彼は仮想ビュー、つまり「更新(選択...)」を更新しています。一部の仮想ビューは更新できますが、すべて更新することはできません。私はemp_id番号の隙間を重要と見なすべきではない、とあなたに同意します。 –

+0

私の質問は、以前に提供された解決策から提起されています。私が明確化を求めたとき、私は質問として疑問を投げかけるように求められました。だから私はそれをやった。今すぐソリューションを探してください。この種のアップデートについて私に知ってもらうことは素晴らしいことです。 – XING

答えて

1

This solution。 row_numberなどのアナリティック関数を含むビューは更新できません。Oracle 12C docsを参照してください。「更新可能なビューに関する注釈」を参照してください。

+0

これに感謝しますが、私はほとんどの票を得た答えを見ていました。私はゴードンが何をやろうとしたのか、将来私が学びたいことを理解したかったのです。 – XING

+2

ああ、私は参照してください。ゴードンのソリューションは、[ここに記載されている](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_8004.htm#SQLRF01504)のために動作するとは思えません。 。集計関数または解析関数 "は、' row_number 'です。 –

+0

それは私があなたがリンクで観察し、そこからの返事が私が質問したはずだったので、私が質問したことです。私の驚きには、2つのアップフォートもあります。 – XING

1

mergeを使用できますが、その列を更新する場合は、emp_id以外に参加する必要があります。ので、あなたの「表」表またはビューである、それはあなたがビューを更新していると言い、そのエラーをグーグルで

merge into employee target 
using (select rowid, row_number() over (order by emp_id) as emp_id from employee) source 
on (source.rowid = target.rowid) 
when matched then update set target.emp_id = source.emp_id; 
+0

これに感謝しますが、私はほとんどの票を得た答えを見ていました。私はゴードンが何をやろうとしたのか、将来私が学びたいことを理解したかったのです。 – XING

+2

私は(異常に)ゴードンの答えが間違っていると思います。なぜそれがOracleで動作しないとして受け入れられているかわからない...この場合、おそらくコメントがより適切でした。しかし、あなたの最初のものは、それが書かれたようにはうまくいかないことを完全に明確にしていないかもしれません。 –

+0

私はそこを懸念しました。彼が間違っているか、私は彼が間違っていると確信しています。彼はここで説明しなければならない。 – XING

関連する問題