2012-12-08 15 views
15

Stworzyłem nową tabelę o nazwie USERLOG z dwoma polami z poprzedniego WIDOKU. Tabela składa się już z około 9000 rekordów. Dwa pola pobrane z WIDOKU, tj. Weblog_views składają się z IP (składa się z adresu IP) i WEB_LINK (składa się z adresu URL). Jest to kod użyłem,Jak dodać kolumnę sekwencji do istniejącej tabeli z rekordami

CREATE TABLE USERLOG 
    AS 
    SELECT C_IP, WEB_LINK FROM weblog_views; 

Chcę dodać kolejną kolumnę do tabeli o nazwie user_id, które składa się z sekwencji wyjściowej 1 do 9000 zapisów, by stworzyć niepowtarzalny identyfikator dla każdego istniejącego rzędach. Potrzebuję pomocy w tej części. Używam oprogramowania Oracle SQL Developer: ODMiner w wersji 3.0.04. Próbowałem przy użyciu opcji automatycznego przyrostu,

ALTER TABLE USERLOG 
    ADD USER_ID INT UNSIGNED NOT NULL AUTO_INCREMENT; 

Ale pojawia się błąd z tym,

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

Tak, chciałbym bardzo wdzięczni za każdą pomoc, że mogę dostać!

Odpowiedz

33

Trzeba by dodać kolumnę

ALTER TABLE userlog 
    ADD(user_id number); 

utworzyć sekwencję

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

aktualizować dane w tabeli

UPDATE userlog 
    SET user_id = user_id_seq.nextval 

Zakładając, że chcesz user_id być podstawowym klucz, następnie należy dodać ograniczenie klucza głównego:

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

Jeśli chcesz użyć sekwencję aby automatycznie dodać user_id kiedy zrobić INSERT (inna opcja byłoby specjalnie odwoływać user_id_seq.nextval w swoim sprawozdaniu INSERT, będzie trzeba także wyzwalacz

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 dla: pobij mnie do tego, lepszą odpowiedź, niż bym dał, i nie używając składni 'SELECT ... FROM dual' w wyzwalaczu. – eaolson

Powiązane problemy