[SQL] 이미 생성 된 테이블에 오라클에서 자동 증가
SQL이미 생성 된 테이블에 오라클에서 자동 증가
어떻게 오라클의 기존 컬럼에 자동 증가를 추가하려면? 열은 이미 생성 된 그리고 그것은 테이블의 기본 키입니다. 그냥 자동 증가로 테이블을 변경하고자합니다. 아래는 열 세부입니다
Column Name DATA_TYPE NULLABLE
SEQ_ID VARCHAR2(9 BYTE) No
자동 증가 개수 값과 같은 150,111,112, 150,111,113 150,111,111 등으로부터되어야
감사
해결법
-
==============================
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
from https://stackoverflow.com/questions/28037303/autoincrement-in-oracle-to-already-created-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 당신은 어떻게 하나 개는 mysql_query에서 여러 SQL 문을합니까? (0) | 2020.05.06 |
---|---|
[SQL] 가장 빠른 방법은 반경 MySQL을 내 포인트에 대한 큰 테이블을 조회하는 뭐죠 (위도, 경도) (0) | 2020.05.06 |
[SQL] 어떻게 MySQL의 날짜 격차를 채우기 위해? (0) | 2020.05.05 |
[SQL] 오라클 SQL은 - 연속 값 범위를 확인 (0) | 2020.05.05 |
[SQL] 어떤 방법은 전체 텍스트와 같은 이노에 검색을 달성하기 위해 (0) | 2020.05.05 |