2012-12-08 25 views
15

ile varolan bir tabloya bir sıra sütunu nasıl eklenir Önceki bir bakıştan iki alanlı USERLOG adlı yeni bir tablo oluşturmuştum. Tablo yaklaşık 9000 kayıttan oluşuyor. VIEW'dan alınan iki alan, yani weblog_views IP'den (IP adresinden oluşur) ve WEB_LINK'den (URL'den oluşur) oluşur. Bu yapardım mevcut her satır için benzersiz bir kimlik oluşturmak için 1 9000 için kayıtları ile başlayan bir dizi oluşur USER_ID denilen bu tabloya başka bir sütun eklemek istediğiniz kullandığım kod,Kayıtlar

CREATE TABLE USERLOG 
    AS 
    SELECT C_IP, WEB_LINK FROM weblog_views; 

olduğunu. Bu kısımda yardıma ihtiyacım var. Oracle SQL Developer kullanıyorum: ODMiner sürüm 3.0.04. Ben OTO-ARTTIRMA seçeneği kullanılarak çalıştı ,

ALTER TABLE USERLOG 
    ADD USER_ID INT UNSIGNED NOT NULL AUTO_INCREMENT; 

Ama bununla bir hata alıyorum,

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

Yani, ben her türlü yardıma takdir gerçekten ediyorum!

cevap

33

Sen user_id birincil olmak istiyorum varsayarsak masanın

UPDATE userlog 
    SET user_id = user_id_seq.nextval 

bir sırasının

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

Güncelleme oluşturmak bir sütun verilerini

ALTER TABLE userlog 
    ADD(user_id number); 

eklemek gerekir anahtar, daha sonra birincil anahtar kısıtlaması

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

Eğer bir INSERT (Diğer seçenek özel olarak INSERT tablolara user_id_seq.nextval başvurmak olacaktır yaptığınızda otomatik user_id eklemek için sırasını kullanmak istiyorsanız, ayrıca bir tetiğe

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

gerekir +1 için: bunu bana verdim, verdiğimden daha iyi cevap verdim ve tetikte 'SELECT ... FROM dual' sözdizimini kullanmıyordum. – eaolson

İlgili konular