오라클DB(12.1버전 이전)에는 auto_increment 기능이 없다
그래서, 시퀀스/트리거를 생성해서 사용해야 한다.
12.1버전부터 지원하는 auto increment 은 내부적으로 시퀀스를 이용한다고 한다
CREATE SEQUENCE TEST_SEQ
START WITH 1
INCREMENT BY 1
MAXVALUE 9999
NOCYCLE
NOCACHE;
cycle : 최소, 최대값에 다다르면 start with 값으로 되돌아감
nocycle : 최소, 최대값에 다다르면 에러가 발생
cache : 메모리상의 시퀀스 값을 관리
drop sequence 시퀀스명;
alter sequnce 시퀀스명 ...; -- start with는 수정 불가능
select 시퀀스명.nextval from dual;
select 시퀀스명.currval from dual;
INSERT INTO TEST(ID, NAME) VALUES(TEST_SEQ.NEXTVAL, "eundms");
1) 시퀀스 현재값 확인
SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'TEST_SEQ';
2) 시퀀스의 Increment를 현재값만큼 빼도록 설정 (시퀀스의 최대값으로 설정)
ALTER SEQUENCE TEST_SEQ INCREMENT BY -7;
3) 시퀀스에서 다음 값을 가져옴
SELECT TEST_SEQ.NEXTVAL FROM DUAL;
4) 시퀀스 INCREMENT 값을 1로 설정
ALTER SEQUENCE TEST_SEQ INCREMENT BY 1;
CREATE OR REPLACE TRIGGER TEST_BEFORE_INSERT
BEFORE INSERT ON TEST -- 'TEST' 테이블에 삽입하기 전에 실행
FOR EACH ROW -- 각 행에 대해 실행
BEGIN
SELECT TEST_SEQ.NEXTVAL -- 시퀀스에서 다음 값을 가져옴
INTO :new.id -- 새 행의 'id' 컬럼에 삽입
FROM dual;
END;
CREATE TABLE test (
id NUMBER GENERATED BY DEFAULT AS IDENTITY
START WITH 1000 INCREMENT BY 1,
name VARCHAR2(100)
);
INSERT INTO test (name) VALUES ('eundms');
[출처]
SQL 소프트 파싱 vs 하드 파싱 (0) | 2024.05.05 |
---|---|
[Oracle DB] ON DELETE CASCADE / SET NULL / 참조되는 부모 테이블 데이터 삭제 (0) | 2024.04.17 |
[Oracle DB] 데이터 타입 : CHAR, VARCHAR, VARCHAR2, NUMBER (0) | 2024.04.16 |
[데이터베이스-개념] NoSQL 종류와 각 특징 (0) | 2023.04.14 |
댓글 영역