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???
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???
'데이터베이스 Study > ORACLE' 카테고리의 다른 글
Oracle ODBC 설치 및 연결 - 오라클이 설치하지 않은 곳에서 (0) | 2010.04.14 |
---|---|
오라클DB 접속이 안될 경우, ( ODP.NET 설치 방법 ) (0) | 2010.03.01 |
오라클 데이타 백업 및 복구하기 (0) | 2010.02.25 |
EXP, IMP 사용해서 테이블 전체 백업하기. (0) | 2010.02.25 |
오라클 유저 생성, 권한주기, 유저 지우기 (0) | 2010.02.17 |