簡體   English   中英

如何將序列列添加到包含記錄的現有表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM