[오라클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
[오프라인 개강예정강좌, 오프라인교육장에 오시면 보다 자세히 배울 수 있습니다.]
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[01/06][기업100%환급]Spring ,MyBatis,Hibernate실무과정
[01/06][기업100%환급]SQL기초에서 Schema Object까지
[01/06]C#,ASP.NET마스터
[01/13]iPhone 하이브리드 앱 개발 실무과정
[01/13][기업100%환급]PL/SQL,ORACLE HINT,TUNING
[01/13][기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
[01/13][기업100%환급]HTML5,JavaScript,Ajax,jQUERY,JSON
[01/16][채용확정]오라클자바실무개발자신입과정
[평일야간]
[12/26]C#,ASP.NET마스터
[12/26]SQL초보에서실전전문가까지
[01/07]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
[01/07]안드로이드개발자과정
[01/09]iPhone하이브리드앱개발실무과정
[01/09]웹퍼블리싱 마스터
[01/09]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[12/28]웹퍼블리싱 마스터
[12/28]Spring3.X,MyBatis,Hibernate실무과정
[12/28]C#,ASP.NET마스터
[01/04]닷넷실무자를위한WPF개발자과정
[01/11]JAVA&WEB프레임워크실무과정
[01/11]안드로이드개발자과정
[01/11]SQL초보에서전문가까지
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[01/06][기업100%환급]Spring ,MyBatis,Hibernate실무과정
[01/06][기업100%환급]SQL기초에서 Schema Object까지
[01/06]C#,ASP.NET마스터
[01/13]iPhone 하이브리드 앱 개발 실무과정
[01/13][기업100%환급]PL/SQL,ORACLE HINT,TUNING
[01/13][기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
[01/13][기업100%환급]HTML5,JavaScript,Ajax,jQUERY,JSON
[01/16][채용확정]오라클자바실무개발자신입과정
[평일야간]
[12/26]C#,ASP.NET마스터
[12/26]SQL초보에서실전전문가까지
[01/07]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
[01/07]안드로이드개발자과정
[01/09]iPhone하이브리드앱개발실무과정
[01/09]웹퍼블리싱 마스터
[01/09]Spring3.X, MyBatis, Hibernate실무과정
[주말]
[12/28]웹퍼블리싱 마스터
[12/28]Spring3.X,MyBatis,Hibernate실무과정
[12/28]C#,ASP.NET마스터
[01/04]닷넷실무자를위한WPF개발자과정
[01/11]JAVA&WEB프레임워크실무과정
[01/11]안드로이드개발자과정
[01/11]SQL초보에서전문가까지
자세한 정보 보러가기 : http://www.oraclejavanew.kr
댓글 없음:
댓글 쓰기