我创建了一个名为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"
所以,我真的很感激我能得到的任何帮助!
答案 0 :(得分:47)
您需要添加一列
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
(另一个选项是在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;
答案 1 :(得分:0)
除了Justin的优秀答案之外,您可能希望将来阻止user_id的NULL值(因为它们仍可能由UPDATE语句引起)。因此,最后执行以下语句:
ALTER TABLE userlog MODIFY(user_id number NOT NULL);