web-dev-qa-db-ja.com

Oracle SQL-主キーをテーブルに追加

主キーのない列がいくつかあり、主キー列を追加したい.

NAME    Age
-------------
Peter   45
Bob     25
John    56
Peter   45

シーケンスとトリガーを使用してPKを追加することを提案する同僚自動増分主キーを既存に追加するOracleのテーブル

これは素晴らしいですが、私の顧客はシーケンスまたはトリガーを追加する権限のないデータベースユーザーを使用します。何十人ものDBA管理者に連絡して、ユーザー権限を変更したり、スクリプトを実行したりするのを防ぎたいです。

更新ステートメントのみでPKを追加することをお勧めします:(手順2でサポートが必要です)

ステップ1: ID列を作成します(このためのDB権限を持っています

ALTER TABLE PERSON ADD ID NUMBER(10,0);

ステップ2:質問:行の順序などに基づいて、ID列を一意の値で初期化できますか?方法

UPDATE PERSON SET ID = something-unique

ステップ3:主キー制約のあとがきを追加します:(I DB have this rights

ALTER TABLE PERSON ADD CONSTRAINT PK_ID PRIMARY KEY(ID);

ステップ4:あとがき:主キーは、アプリケーションによって管理および追加されます。

これが結果になります:

ID(PK)  NAME    Age
---------------------
1       Peter   45
2       Bob     25
3       John    56
4       Peter   45

どうもありがとう!

11
Dimitri Dewaele
Update person set id = rownum;
26
WW.

このアイデアは非常に幼稚ですが、テーブルに大量の行がない場合は正常に機能するはずです。

ステップ2では、次のようなforループを実行します。

declare
    i pls_integer :=1;
     begin
    for rec in (select name,age, rowid from table_name)
    loop
    update table_name set id = i 
    where 
     table_name.name=rec.name 
     and table_name.age=rec.age 
     and table_name.rowid = rec.rowid;
    i:=i+1;
    end loop;
end;
1
Arnab Bhagabati