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
Posted by Duritz

공지사항

Yesterday
Today
Total
05-18 14:19

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31