2012-12-08 38 views
15

Tôi đã tạo một bảng mới có tên USERLOG với hai trường từ một VIEW trước đó. Bảng đã bao gồm khoảng 9000 hồ sơ. Hai trường được lấy từ VIEW, nghĩa là weblog_views bao gồm IP (bao gồm địa chỉ IP) và WEB_LINK (bao gồm URL). Đây là mã tôi đã sử dụng,Cách thêm cột thứ tự vào một bảng hiện có với các bản ghi

CREATE TABLE USERLOG 
    AS 
    SELECT C_IP, WEB_LINK FROM weblog_views; 

Tôi muốn thêm cột khác để bảng này được gọi là USER_ID, mà sẽ bao gồm một chuỗi bắt đầu với 1-9000 hồ sơ để tạo ra một id duy nhất cho mỗi hàng hiện có. Tôi cần giúp đỡ với phần này. Tôi đang sử dụng Oracle SQL Developer: ODMiner phiên bản 3.0.04. tôi đã cố gắng sử dụng tùy chọn tự động tăng,

ALTER TABLE USERLOG 
    ADD USER_ID INT UNSIGNED NOT NULL AUTO_INCREMENT; 

Nhưng tôi nhận được một lỗi với điều này,

Error report: 
    SQL Error: ORA-01735: invalid ALTER TABLE option 
    01735. 00000 - "invalid ALTER TABLE option" 

Vì vậy, tôi sẽ thực sự đánh giá cao sự giúp đỡ nào mà tôi có thể có được!

Trả lời

33

Bạn sẽ cần phải thêm một cột

ALTER TABLE userlog 
    ADD(user_id number); 

tạo ra một chuỗi

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

Cập nhật dữ liệu trong bảng

UPDATE userlog 
    SET user_id = user_id_seq.nextval 

Giả sử rằng bạn muốn user_id là chính , sau đó bạn sẽ thêm ràng buộc khóa chính

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

Nếu bạn muốn sử dụng chuỗi để tự động thêm user_id khi bạn làm một (tùy chọn khác INSERT sẽ được đặc biệt tham khảo user_id_seq.nextval trong INSERT báo cáo của bạn, bạn cũng sẽ cần một kích hoạt

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 cho: đánh bại tôi với nó, câu trả lời tốt hơn tôi đã đưa ra, và không sử dụng cú pháp 'SELECT ... FROM dual' trong trigger. – eaolson

Các vấn đề liên quan