[英]How to add a sequence column to an existing table with records
我創建了一個名為 USERLOG 的新表,其中包含來自先前 VIEW 的兩個字段。 該表已經包含大約 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 版。 我嘗試使用 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"
所以,我真的很感激我能得到的任何幫助!
您需要添加一列
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 );
如果您想在執行INSERT
時使用序列自動添加user_id
(另一個選項是在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;
除了 Justin 的出色回答之外,您可能希望將來防止您的 user_id 出現 NULL 值(因為它們仍然可能由 UPDATE 語句引起)。 因此,在最后執行如下語句:
ALTER TABLE userlog MODIFY(user_id number NOT NULL);
步驟 1. 創建列使用的序列,例如:
CREATE SEQUENCE user_id_seq
START WITH 1
INCREMENT BY 1
CACHE 20;
步驟 2. 使用序列更新新列,例如:
UPDATE userlog
SET user_id = user_id_seq.nextval;
第 3 步。- 將 Sequence 設置為列的默認值,僅適用於 Oracle 12c 以上
ALTER TABLE USERLOG
MODIFY USER_ID INT DEFAULT user_id_seq.nextval;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.