如何将序列列添加到包含记录的现有表中

use*_*543 18 sql oracle11g

我创建了一个名为USERLOG的新表,其中包含前一个VIEW中的两个字段.该表已包含约9000条记录.从VIEW获取的两个字段,即weblog_views包括IP(由IP地址组成)和WEB_LINK(由URL组成).这是我用的代码,

    CREATE TABLE USERLOG
    AS
    SELECT C_IP, WEB_LINK FROM weblog_views;
Run Code Online (Sandbox Code Playgroud)

我想在此表中添加另一个名为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;
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,

    Error report:
    SQL Error: ORA-01735: invalid ALTER TABLE option
    01735. 00000 -  "invalid ALTER TABLE option"
Run Code Online (Sandbox Code Playgroud)

所以,我真的很感激我能得到的任何帮助!

Jus*_*ave 48

您需要添加一列

ALTER TABLE userlog
  ADD( user_id number );
Run Code Online (Sandbox Code Playgroud)

创建一个序列

CREATE SEQUENCE user_id_seq
  START WITH 1
  INCREMENT BY 1
  CACHE 20;
Run Code Online (Sandbox Code Playgroud)

更新表中的数据

UPDATE userlog
   SET user_id = user_id_seq.nextval
Run Code Online (Sandbox Code Playgroud)

假设您想user_id成为主键,那么您将添加主键约束

ALTER TABLE userlog
  ADD CONSTRAINT pk_user_id PRIMARY KEY( user_id );
Run Code Online (Sandbox Code Playgroud)

如果你想使用序列自动添加user_id你做的时间INSERT(另一种选择是user_id_seq.nextval在你的INSERT语句中专门引用,你还需要一个触发器

CREATE OR REPLACE TRIGGER trg_userlog_user_id
  BEFORE INSERT ON userlog
  FOR EACH ROW
BEGIN
  :new.user_id := user_id_seq.nextval;
END;
Run Code Online (Sandbox Code Playgroud)