sql - 테이블 - 자바 시퀀스




레코드가있는 기존 테이블에 시퀀스 열을 추가하는 방법 (2)

나는 이전 VIEW의 두 필드가있는 USERLOG라는 새 테이블을 만들었습니다. 테이블은 이미 약 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"

그래서, 나는 내가 얻을 수있는 어떤 도움에 정말로 감사 할 것입니다!


열을 추가해야합니다.

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 );

INSERT 할 때 시퀀스를 사용하여 user_id 를 자동으로 추가하려는 경우 (다른 옵션은 INSERT 문에서 user_id_seq.nextval 을 구체적으로 참조하는 user_id_seq.nextval 트리거가 필요합니다.

CREATE OR REPLACE TRIGGER trg_userlog_user_id
  BEFORE INSERT ON userlog
  FOR EACH ROW
BEGIN
  :new.user_id := user_id_seq.nextval;
END;

저스틴의 훌륭한 답변 외에도 (여전히 UPDATE 문으로 인해 발생할 수 있으므로) 향후에 user_id의 NULL 값을 방지 할 수 있습니다. 따라서 끝에 다음 명령문을 실행하십시오.

ALTER TABLE userlog MODIFY(user_id number NOT NULL);





oracle11g