2つのvarchar2列を持つ表があります。この列の主キーを作成するために、既存のテーブルに新しい数値列を追加しました。この表には3つの列が含まれています。私は次のように匿名ブロックを使用しようとしました:
declare
cnt number;
begin
select nvl(count(*),0) into cnt from sometable;
for i in 1..cnt
loop
update sometable set id=i where i=rownum;
end loop;
end;
この匿名ブロックを使用すると、このテーブルが突然更新されます。
私のソリューションは、次のステートメントを使用していた:
create table sometablecopy as select row_number() over(order by sometable.col1) as id, sometable.* from sometable;
それでも私は骨董品がなぜ無名ブロックの生産がROWNUMの疑似列の助けを借りて、主キーの値を期待しないのですか?それはrownum関連の問題でなければなりません。新しい列をOracle表に追加した後の主キー値の生成
0
A
答えて
1
ROWNUMは擬似列です。選択から戻されるときに行に割り当てられます。だから、あなたが言うことはできません "選択* my_table where rownum = 42" rownum = 42との行はまだ定義されていないので、それはあなたの選択と述語によって異なります(と "select * from my_table where rownum = 1 "最初の行ではなく、1つの行が返されます)。
これは、テーブル全体を更新するのに十分なロールバックがあることを前提としています。
希望に役立ちます。
1
+0
実際にそれを構成するのは簡単すぎますが、この作業の目的上は受け入れられます:) – reforrer
+0
@reforrer:あなたが何を意味するかわかりません。どのように単純すぎることができますか? –
関連する問題
- 1. oracleの表の主キー列を取得
- 2. Oracle SQL自動生成ID主キー
- 3. oracle主キーの連続値
- 4. 連想配列で新しいキーを作成し、それに値を追加
- 5. 新しいキー、値(値= 1)をPHPの配列内に追加します
- 6. なしprimayキー古いテーブルに主キー列を追加します
- 7. 別のイベントの後で新しい列に数値を生成
- 8. Oracleデータベース:NULL値を持つ索引構成表(複数列主キー)
- 9. Oracleビューに主キーを追加する方法は?
- 10. 列の後に新しい列を追加し、既定値を定義する
- 11. 3列のマージ値を照会し、Oracleの主キーとしてマージする
- 12. API + ambariクラスタに新しいパラメータと値を追加した後
- 13. SELECTステートメントで作成されたテーブルにオートインクリメントの主キーを追加します。
- 14. 主キー値の更新Cassandra
- 15. dictのキーに新しい値を追加するには?
- 16. 新しい列を追加した後のデータベースエラー
- 17. 新しいコントロールを追加した後に新しい行を追加する
- 18. Oracle生成された列をselectに追加する方法*
- 19. レンダリングした後、新しいコンポーネントを追加した後に
- 20. 新しい列を追加した後にテーブルの各行を更新する
- 21. イオン/角度2:クリック時に新しい項目を追加した後の配列値を表示
- 22. 新しいキーと値のペアをマップに追加する
- 23. 新しいキーの内側に新しいキーを追加し、Pythonの辞書に値を代入
- 24. キー値を追加した後にツリーマップをソートする方法
- 25. EFでテーブルに新しい行を追加すると、主キーの制約違反が発生する
- 26. DEFAULT値とNULLABLE列タイプのORACLEに列を追加します
- 27. 関数内に新しい配列キーを追加します
- 28. 既存のテーブルに主キーを持つ列を追加する
- 29. mysqlのテーブルに別の主キーを追加します。
- 30. 新しい入力を追加した後に値を入力しない
予期しない結果は何ですか? – StevieG
結果が返されたときにRownumが割り当てられます。結果として、少なくとも1つの行がある場合、最初のものは1に等しいrownumを持たなければならないので、 'SELECT WHERE rownum <1'を実行することは決してできません。 – Benoit
StevieG:すべての行は、最初の行最初の行は番号1を持ち、他の行はcnt変数を持ちます。 – reforrer