SEQUENCE
- 데이터 저장됨 - 중복되지않는 고유번호를 사용하는것
- ex) 12345에서 2가 빠지면 1234가 됨
CREATE SEQUENCE DIV_DNO
START WITH 1 --시작값 : (변경불가)
INCREMENT BY 1 --1씩 증가값
MINVALUE 1 --최솟값
MAXVALUE 10 --최댓값
NOCYCLE --반복하지않음 (/CYCLE)
NOCACHE; -- 10개씩 메모리상에 올라감 (/CACHE)
시퀀스 사용
- 시퀀스명.NEXTVAL
:일련번호 생성함 / 증가된 값은 다시 내릴 수 없음 / 실행할때마다 값 올라감
- 시퀀스명.CURRVAL
:현재 시퀀스 순번을 가져올 수 있음 / NEXTVAL을 한번 실행한 세션에서만 사용가능
ROWNUM
SQL
SELECT ROWNUM, PNAME, PAY FROM PERSONNEL;
SEQUENCE
SQL
CREATE SEQUENCE DIV_DNO
START WITH 1
INCREMENT BY 1 --1씩 증가
MAXVALUE 10 --10까지
NOCYCLE --반복하지않음
NOCACHE; -- 10개씩 메모리상에 올라감 / NOCACHE
-- CURRVAL : SEQUENCE의 현재 번호 (SEQUENCE의 이름.CURVAL)
-- NEXTVAL : SEQUENCE의 다음 번호 (SEQUENCE의 이름.NEXTVAL)
SELECT DIV_DNO.CURRVAL FROM DUAL; -- 발사한 총알 확인
SELECT DIV_DNO.NEXTVAL FROM DUAL; --발사한 횟수
SELECT * FROM USER_SEQUENCES;
INSERT INTO DIVISION (DNO,DNAME) VALUES (DIV_DNO.NEXTVAL,'AAA'); --3번 생성
SELECT * FROM DIVISION;
INSERT INTO DIVISION (DNO,DNAME) VALUES (DIV_DNO.NEXTVAL,'BBB'); --4번 생성
ALTER SEQUENCE DIV_DNO
MAXVALUE 999
CYCLE
CACHE 20;
SELECT * FROM USER_SEQUENCES;
INSERT INTO PERSONNEL (PNO) VALUES (DIV_DNO.NEXTVAL); -- 다른 표적에 한발 쐈기때문에
SELECT * FROM PERSONNEL;
INSERT INTO DIVISION (DNO,DNAME) VALUES (DIV_DNO.NEXTVAL,'CCC'); --갭이 생겨서 4번다음에 6번이 됨 (중복되지않는 고유값)