출처 : How to Create Auto Increment Columns in Oracle
MySQL 에서는 create table 명령문 내에서 auto-increment 를 사용할 수 있지만,
ORACLE에서는 그게 불가능한 것처럼 보인다.
이건 내가 알고 있는 지식일 뿐, oracle도 create table 명령문 내에서 가능할 수도 있다.
아무튼. create table 내에서 auto-increment를 세팅할 수 없다는 가정 하에, sequence와 trigger를 통해서 어떻게 auto-increment를 생성할 수 있는지 알아보도록 하자.
먼저, auto-increment를 시행해볼 table을 만들자.
SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
Table created.
id column을 auto incrment 하고 싶다고 가정하자. id가 1로부터 시작해서 1씩 증가할 수 있도록 sequence를 생성한다.
SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
Sequence created.
이제 test 테이블에 insert 할 때마다 id column에 이 sequence 를 적용시킬 수 있도록 trigger를 걸어보도록 하자.
CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;
Trigger created.
이제 test 테이블에 새로운 row가 insert 될 때마다 이 test_trigger가 실행될 것이고, 결과적으로 id가 자동으로 1씩 증가하게 된다. insert 문에서 id의 값으로는 null을 주거나, 다른 값(즉, name) 만 설정해 주어도 된다.
확인을 해보자.
SQL> INSERT INTO test (name) VALUES ('Jon');
1 row created.
SQL> INSERT INTO test (name) VALUES (’Bork’);
1 row created.
SQL> INSERT INTO test (name) VALUES (’Matt’);
1 row created.
SQL> SELECT * FROM test;
ID NAME
———- ——————————
1 Jon
2 Bork
3 Matt
자! 모든 게 완성되었다!
다만, 이번 예제의 경우 column이 id와 name, 이렇게 2개밖에 안되어 id를 제외한 모든 column을 일일이 나열해 insert를 해줄 수 있었지만, column의 수가 많을 경우, 이와 같은 작업이 불가능하다. 이럴 경우, id의 값 대신 null을 주면 된다. 즉, 다음과 같다.
SQL> INSERT INTO test (name) VALUES ('Jon');
-->
SQL> INSERT INTO test VALUES (null, 'Jon');
OK???
MySQL 에서는 create table 명령문 내에서 auto-increment 를 사용할 수 있지만,
ORACLE에서는 그게 불가능한 것처럼 보인다.
이건 내가 알고 있는 지식일 뿐, oracle도 create table 명령문 내에서 가능할 수도 있다.
아무튼. create table 내에서 auto-increment를 세팅할 수 없다는 가정 하에, sequence와 trigger를 통해서 어떻게 auto-increment를 생성할 수 있는지 알아보도록 하자.
먼저, auto-increment를 시행해볼 table을 만들자.
SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
Table created.
id column을 auto incrment 하고 싶다고 가정하자. id가 1로부터 시작해서 1씩 증가할 수 있도록 sequence를 생성한다.
SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
Sequence created.
이제 test 테이블에 insert 할 때마다 id column에 이 sequence 를 적용시킬 수 있도록 trigger를 걸어보도록 하자.
CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;
Trigger created.
이제 test 테이블에 새로운 row가 insert 될 때마다 이 test_trigger가 실행될 것이고, 결과적으로 id가 자동으로 1씩 증가하게 된다. insert 문에서 id의 값으로는 null을 주거나, 다른 값(즉, name) 만 설정해 주어도 된다.
확인을 해보자.
SQL> INSERT INTO test (name) VALUES ('Jon');
1 row created.
SQL> INSERT INTO test (name) VALUES (’Bork’);
1 row created.
SQL> INSERT INTO test (name) VALUES (’Matt’);
1 row created.
SQL> SELECT * FROM test;
ID NAME
———- ——————————
1 Jon
2 Bork
3 Matt
자! 모든 게 완성되었다!
다만, 이번 예제의 경우 column이 id와 name, 이렇게 2개밖에 안되어 id를 제외한 모든 column을 일일이 나열해 insert를 해줄 수 있었지만, column의 수가 많을 경우, 이와 같은 작업이 불가능하다. 이럴 경우, id의 값 대신 null을 주면 된다. 즉, 다음과 같다.
SQL> INSERT INTO test (name) VALUES ('Jon');
-->
SQL> INSERT INTO test VALUES (null, 'Jon');
OK???
[이 게시물은 지니야님에 의해 2019-03-09 08:43:47 dbms에서 이동 됨]