복붙노트

[SQL] 이미 생성 된 테이블에 오라클에서 자동 증가

SQL

이미 생성 된 테이블에 오라클에서 자동 증가

어떻게 오라클의 기존 컬럼에 자동 증가를 추가하려면? 열은 이미 생성 된 그리고 그것은 테이블의 기본 키입니다. 그냥 자동 증가로 테이블을 변경하고자합니다. 아래는 열 세부입니다

 Column Name         DATA_TYPE              NULLABLE
 SEQ_ID             VARCHAR2(9 BYTE)        No  

자동 증가 개수 값과 같은 150,111,112, 150,111,113 150,111,111 등으로부터되어야

감사

해결법

  1. ==============================

    1.11g 이전에 트리거를 통해 열이 증가하는 시퀀스를 생성한다. 사전의 12C 자료에서 참조 자동 증가 기본 키 (신원 기능)

    11g 이전에 트리거를 통해 열이 증가하는 시퀀스를 생성한다. 사전의 12C 자료에서 참조 자동 증가 기본 키 (신원 기능)

    예를 들어,

    SQL> CREATE TABLE t (
      2    ID           NUMBER(10)    NOT NULL,
      3    text  VARCHAR2(50)  NOT NULL);
    
    Table created.
    

    PRIMARY KEY 서열로 채워야

    SQL> ALTER TABLE t ADD (
      2    CONSTRAINT id_pk PRIMARY KEY (ID));
    
    Table altered.
    

    SEQUENCE는 기본 키를 지원하는

    SQL> CREATE SEQUENCE t_seq
      2  START WITH 150111111
      3  INCREMENT BY 1;
    
    Sequence created.
    

    당신이 INSERT의 순서를 갖고 싶어하지 않을 경우 트리거, 당신은 트리거를 통해 그것을 자동화 할 수 있습니다.

    SQL> CREATE OR REPLACE TRIGGER t_trg
      2  BEFORE INSERT ON t
      3  FOR EACH ROW
      4  WHEN (new.id IS NULL)
      5  BEGIN
      6    SELECT t_seq.NEXTVAL
      7    INTO   :new.id
      8    FROM   dual;
      9  END;
     10  /
    
    Trigger created.
    

    끼워 넣다

    SQL> INSERT INTO t(text) VALUES('auto-increment test 1');
    
    1 row created.
    
    SQL> INSERT INTO t(text) VALUES('auto-increment test 2');
    
    1 row created.
    

    우리는 ID 열이 원하는 values-로 자동 증가가있는 경우 보자

    SQL> SELECT * FROM t;
    
            ID TEXT
    ---------- --------------------------------------------------
     150111111 auto-increment test 1
     150111112 auto-increment test 2
    
    SQL>
    

    그래서, ID 열은 지금 후속 인서트 1 씩 증분 값 150,111,111 시작한다.

    12C에서 ID 열을 사용합니다. 오라클 12C에 참고 IDENTITY 열 자동 증가 기능

    예를 들어,

    IDENTITY 열이 표

    SQL> CREATE TABLE t
      2    (
      3      ID NUMBER GENERATED ALWAYS AS IDENTITY
      4      START WITH 150111111 INCREMENT BY 1,
      5      text VARCHAR2(50)
      6    );
    
    Table created.
    

    끼워 넣다

    SQL> INSERT INTO t
      2    ( text
      3    ) VALUES
      4    ( 'This table has an identity column'
      5    );
    
    1 row created.
    

    우리는 ID 열이 원하는 values-로 자동 증가가있는 경우 보자

    SQL> COLUMN text format A40
    SQL> SELECT * FROM t;
    
            ID TEXT
    ---------- ----------------------------------------
     150111111 This table has an identity column
    

    그래서, ID 열은 지금 후속 인서트 1 씩 증분 값 150,111,111 시작한다.

    오라클은 ID 열을 채우는 시퀀스를 생성한다. 당신은 ISEQ로 이름을 찾을 수 있습니다 $$

    SQL> SELECT sequence_name,
      2    min_value,
      3    max_value,
      4    increment_by
      5  FROM user_sequences;
    
    SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY
    ------------------------------ ---------- ---------- ------------
    ISEQ$$_94087                            1 1.0000E+28            1
    
    SQL>
    

    신원 컬럼에 대한 자세한 정보는 ALL_TAB_IDENTITY_COLS보기를 사용합니다.

    SQL> SELECT table_name,
      2    column_name,
      3    generation_type,
      4    identity_options
      5  FROM all_tab_identity_cols
      6  WHERE owner = 'LALIT'
      7  ORDER BY 1,
      8    2;
    
    TABLE_NAME           COLUMN_NAME GENERATION IDENTITY_OPTIONS
    -------------------- ----------- ---------- ----------------------------------------------
    
    T                    ID          ALWAYS     START WITH: 150111111, INCREMENT BY: 1, 
                                                MAX_VALUE:9999999999999999999999999999, 
                                                MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20, 
                                                ORDER_FLAG: N
    
  2. from https://stackoverflow.com/questions/28037303/autoincrement-in-oracle-to-already-created-table by cc-by-sa and MIT license