2012-12-08 69 views
15

我已經使用前一個VIEW的兩個字段創建了一個名爲USERLOG的新表。該表已經包含了大約9000條記錄。從VIEW獲取的兩個字段即weblog_views由IP(由IP地址組成)和WEB_LINK(由URL組成)組成。這是我使用的代碼,如何將序列列添加到包含記錄的現有表中

CREATE TABLE USERLOG 
    AS 
    SELECT C_IP, WEB_LINK FROM weblog_views; 

我想另一列添加到該表稱爲USER_ID,這將包括1至9000記錄開始創建一個唯一的ID爲每個現有行的序列。我需要這部分的幫助。我正在使用Oracle SQL Developer:ODMiner版本3.0.04。 我使用自動遞增選項嘗試,

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

您將需要添加一列

ALTER TABLE userlog 
    ADD(user_id number); 

創建序列

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

更新數據表中的

UPDATE userlog 
    SET user_id = user_id_seq.nextval 

假設你想user_id成爲主鍵,然後添加主鍵約束

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

如果你想使用序列自動添加user_id,當你做一個INSERT(另一個選擇是在你的INSERT聲明具體提到user_id_seq.nextval,你還需要一個觸發

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

相關問題