[오라클12C새기능]ORACLE12C자동증분컬럼,
ID컬럼(Identity Columns in Oracle Database 12c)
오라클12C 이전에는 다른 데이터베이스에서 사용되는 자동증분컬럼에 대한 정의는 없었다. 대부분 오라클 시퀀스나 트리거를 이용하여
처리하곤 했는데 ORACLE12C에 생겨 다행이다.^^
[형식]
GENERATED
[ ALWAYS | BY DEFAULT [ ON NULL ] ]
AS IDENTITY [ ( identity_options ) ]
[ ALWAYS | BY DEFAULT [ ON NULL ] ]
AS IDENTITY [ ( identity_options ) ]
아래 예제를 테스트 하기 위해서는 create table, create sequence 권한이 있어야 한다.
(conn / as sysdba 후 grant create table, create sequence to 유저명)
(conn / as sysdba 후 grant create table, create sequence to 유저명)
1. ALWAYS를 이용한 default value
정의
(ID컬럼에 NULL이든 아니든 값을 입력할 수 없다.)
(ID컬럼에 NULL이든 아니든 값을 입력할 수 없다.)
CREATE TABLE test (
id NUMBER GENERATED ALWAYS AS IDENTITY,
name VARCHAR2(10)
);
SQL> INSERT INTO test (name) VALUES ('오라클자바커뮤니티');
1 row created.
SQL> INSERT INTO test (id, name) VALUES (NULL, '널길동');
INSERT INTO test (id, name) VALUES (NULL, '널길동')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column
INSERT INTO test (id, name) VALUES (NULL, '널길동')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column
SQL> INSERT INTO test (id, name) VALUES (9, '9길동');
INSERT INTO test (id, name) VALUES (9, '9길동')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column
2. BY DEFAULT를이용한 default value
정의
(ID컬럼에 NULL을 제외하고는 값을 입력할 수 없다.)
CREATE TABLE test (
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR2(10)
);
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR2(10)
);
SQL> INSERT INTO test (name) VALUES ('오라클자바커뮤니티');
1 row created.
SQL> INSERT INTO test (id, name) VALUES (9, '9길동');
1 row created.
SQL> INSERT INTO test (id, name) VALUES (NULL, '널길동');
INSERT INTO test (id, description) VALUES (NULL, '널길동')
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."TEST"."ID")
INSERT INTO test (id, description) VALUES (NULL, '널길동')
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SCOTT"."TEST"."ID")
3. DEFAULT ON NULL을 이용한 default value 정의
(ID컬럼에 NULL이든 아니든 값을 입력할 수 있다. 입력안하면 기본값으로 set)
CREATE TABLE test (
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
name VARCHAR2(10)
);
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
name VARCHAR2(10)
);
SQL> INSERT INTO test (name) VALUES ('오라클자바커뮤니티');
1 row created.
SQL> INSERT INTO test (id, name) VALUES (9, '9길동');
1 row created.
SQL> INSERT INTO test (id, name) VALUES (NULL, '널길동');
1 row created.
SQL> SELECT * FROM test;
ID NAME
---------- ------------------------------
1 오라클자바커뮤니티
9 9길동
2 널길동
아래 질의를 보자. 자동증분컬럼 ID컬럼은 내부적으로 오라클 시퀀스로 이루어짐을 알 수 있다.
---------- ------------------------------
1 오라클자바커뮤니티
9 9길동
2 널길동
아래 질의를 보자. 자동증분컬럼 ID컬럼은 내부적으로 오라클 시퀀스로 이루어짐을 알 수 있다.
SELECT table_name,
column_name,
generation_type,
identity_options
FROM all_tab_identity_cols
WHERE owner = 'SCOTT'
ORDER BY 1, 2;
TABLE_NAME COLUMN_NAME GENERATION
IDENTITY_OPTIONS
-------------------- --------------- ---------- ----------------------------------------
TEST ID ALWAYS START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999
999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N
, CACHE_SIZE: 20, ORDER_FLAG: N
-------------------- --------------- ---------- ----------------------------------------
TEST ID ALWAYS START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999
999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N
, CACHE_SIZE: 20, ORDER_FLAG: N
오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터
(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)
[개강확정 강좌]
[평일저녁9/24]iPhone 하이브리드 앱 개발 실무과정
[평일저녁9/26]Spring3.X, MyBatis, Hibernate실무과정 
[주말9/28] 웹퍼블리싱 마스터 
댓글 없음:
댓글 쓰기