2009. 3. 14. 03:39 Program.../Oracle
Oracle Sequence
--- ○ Sequence
create table sunbun
(no number
,name varchar2(10)
) tablespace users;
create sequence seq_2
start with 3 -- minvalue의 값은 start의 값보다 같거나 작아야 한다.
increment by 2
maxvalue 10
minvalue 1
cycle -- max값이 넘으면 반복을한다.
-- nocyle은 max값이 초과되면 정지한다.
nocache; -- 메모리에 기억해 둘것인지 여부를 명시 (cache)
select * from sunbun;
insert into sunbun values(seq_1.nextval,'홍길동');
insert into sunbun values(seq_1.nextval,'이순신');
insert into sunbun values(seq_1.nextval,'엄정화');
insert into sunbun values(seq_1.nextval,'김정화'); --- 여기까지는 순차대로 입력이 된다.
insert into sunbun values(seq_1.nextval,'이정화'); --- 여기는 max값이 넘으므로 다시 cycle되서
--- min값이 된다.
drop table sunbun -- 테이블 삭제
drop sequence seq_1 -- sequence 삭제
create table sunbun1
(no number
,name varchar2(10)
) tablespace users;
create table sunbun2
(no number
,name varchar2(10)
) tablespace users;
create sequence seq_no
start with 1
increment by 1
nomaxvalue -- 1E27까지 증가 생성된다. (max값을 주지 않는다)
nocycle -- nocycle을 하면 minvalue를 써줄 필요가 없다.
nocache; -- min값이 없으면 자동으로 -1E27까지 생성가능하다.
insert into sunbun1 values(seq_no.nextval,'일정화');
insert into sunbun1 values(seq_no.nextval,'이정화');
insert into sunbun1 values(seq_no.nextval,'삼정화');
-- 값을 3개 입력하였으니 1,2,3 으로 입력이 되는데
select * from sunbun1;
insert into sunbun2 values(seq_no.nextval,'사정화');
insert into sunbun2 values(seq_no.nextval,'오정화');
-- 앞에서 sequence를 사용했기때문에 테이블이 달라져도 계속 적용이되서 순번이 4,5가 나온다.
select * from sunbun2;
insert into sunbun1 values(seq_no.nextval,'육정화');
insert into sunbun1 values(seq_no.nextval,'칠정화');
-- 다시 테이블을 바꿔 입력해도 계속 순차데로 입력이 되어진다.
select *
from user_sequences
where sequence_name='SEQ_NO'; -- 시퀀스의 내용을 보여준다.
select seq_no.currval from dual; -- 현재까지 사용한 seq 숫자를 보여준다.
/* 테이블값이 삭제되고 다시 생성한 seq로 다시 테이블 값을 넣으면 시작값부터 시작하는것이 아니라
소모된 seq다음의 값부터 시작된다. 그러므로 게시판 게시글 순번같은 곳에는 사용을 권장하지 않는다. */
alter sequence seq_no -- alter에는 start를 넣을 수 없다.
increment by 2 -- 증가치를 바꾸려면 alter를 써서 변경하면된다.
nomaxvalue -- 하지만 start값을 바꾸려면 seq를 지우고 다시 만들어야 한다.
nocycle
nocache;
select *
from user_sequences
where sequence_name='SEQ_NO'; -- seq내용을 확인해보면 증가치가 변경된것을 볼 수 있다.
'Program... > Oracle' 카테고리의 다른 글
Oracle Function (함수생성) (1) | 2009.03.14 |
---|---|
Oracle PL(Procedure Language)/SQL (0) | 2009.03.14 |
Oracle sqlldr 실습 및 Index (0) | 2009.03.14 |
Oracle sqlldr (외부데이타 부워넣기) 사용법 (0) | 2009.03.14 |
Oracle View (0) | 2009.03.14 |