2012-12-08 11 views
15

以前のVIEWの2つのフィールドを持つUSERLOGという名前の新しいテーブルを作成しました。テーブルはすでに約9000のレコードで構成されています。 VIEWから取得した2つのフィールド、つまりweblog_viewsはIP(IPアドレスで構成)とWEB_LINK(URLで構成)で構成されます。これは私がこのテーブルに別の列を追加したい、私が使用したコード、レコードを持つ既存のテーブルにシーケンス列を追加する方法

CREATE TABLE USERLOG 
    AS 
    SELECT C_IP, WEB_LINK FROM weblog_views; 

は希望が各既存の行の一意のIDを作成するために、1 9000に、レコードから始まる配列から成るUSER_IDと呼ばれます。私はこの部分で助けが必要です。 Oracle SQL Developer:ODMinerバージョン3.0.04を使用しています。 だから私は、AUTO-INCREMENTオプションを使用して

ALTER TABLE USERLOG 
    ADD USER_ID INT UNSIGNED NOT NULL AUTO_INCREMENT; 

を試みたが、私はこれでエラーを取得し、

Error report: 
    SQL Error: ORA-01735: invalid ALTER TABLE option 
    01735. 00000 - "invalid ALTER TABLE option" 

、私は私が得ることができる任意の助けを本当に感謝!

答えて

33

あなたは、順序、あなたがuser_idが主になりたいと仮定すると

CREATE SEQUENCE user_id_seq 
    START WITH 1 
    INCREMENT BY 1 
    CACHE 20; 

更新テーブル内のデータが

UPDATE userlog 
    SET user_id = user_id_seq.nextval 

を作成し、列

ALTER TABLE userlog 
    ADD(user_id number); 

を追加する必要がありますキーを追加すると、プライマリキーの制約が追加されます

ALTER TABLE userlog 
    ADD CONSTRAINT pk_user_id PRIMARY KEY(user_id); 

あなたはINSERT(他のオプションは、特にあなたのINSERT文でuser_id_seq.nextvalを参照することです行うときに、自動的にuser_idを追加するためのシーケンスを使用したい場合は、また、トリガー

CREATE OR REPLACE TRIGGER trg_userlog_user_id 
    BEFORE INSERT ON userlog 
    FOR EACH ROW 
BEGIN 
    :new.user_id := user_id_seq.nextval; 
END; 
+0

が必要になります+1のために:それに私を打つ、私が与えたよりも良い答え、およびトリガで 'SELECT ... FROM dual'構文を使用しないでください。 – eaolson

関連する問題