2012년 1월 18일 수요일
Oracle Sequence 정리
SEQUENCE 선언하기
문법
CREATE SEQUENCE 시퀀스이름 START WITH 1 INCREMENT BY 증가숫자 MAXVALUE 최대값 nocycle cache 20;
--시퀀스이름 SEQUENCE명입니다. START WITH는 시작 번호 INCREMENT는 증가 번호입니다.
--MAXVALUE는 최대 시퀀스 값입니다. 최대값까지 가면 처리가 안되고 에러가 납니다.
--MAXVALUE는 생략시 10의 27승까지 가능하다.
--cycle는 최대값까지 간다음에 다시 start with부터 시작하지만 nocycle는 최대값을 간후에 멈춘다.
--cache는 메모리에 캐쉬하여 사용한다. nocache는 메모리에 캐쉬하여 사용안한다.
예제
create sequence dept_deptno
increment by 1
maxvalue 100
nocache
nocycle;
SEQUENCE 사용하기(선언후에 insert 에 값처럼 사용합니다.)
seq_bbs.nextval;
--매번 증가되는 연속값(유동)
seq_bbs.currval;
--마지막 연속값(고정)
※ seq_bbs.nextval 과 seq_bbs.currval의 차이점은 전자는 마지막 시퀀스값에 증가값을 더한값이며 후자는 마지막 시퀀스값입니다.
※ currval은 참조되기 전에 nextval이 먼저 이용되어야 합니다.
※ SEQUENCE는 정수,문자열형 컬럼에 모두 대입됩니다.
현재 DB에 생선된 SEQUENCE 보기
select * from user_sequences;
select sequence_name, min_value, max_value,increment_by, last_number from user_sequences;
select * from seq;
Sequence 수정하기
alter sequence dept_deptno
increment by 1
maxvalue 999999
nocache
nocycle;
SEQUENCE 삭제하기
drop SEQUENCE sequence_name;
drop SEQUENCE seq_bbs;
select절이나 update에 사용하게 되면
초기 값이 1인 스퀀스(1씩증가)를 4개의 출력 select 쿼리에 다음과 같이 사용하게되면
select bbs.nextval from bbs;
1
2
3
4
가 출력되면 insert에 해당 bbs.nextval 를 사용하게되면 5가 적용됩니다.
초기 값이 1인 스퀀스(1씩증가)를 4개의 처리 update 쿼리에 다음과 같이 사용하게되면
insert into bbs values (bbs.nextval);
1
2
3
4
가 출력되면 insert에 해당 bbs.nextval 를 사용하게되면 5가 적용됩니다.
※ Sequence는 SELECT 문에는 사용하지 않습니다.
Sequence 를 매일 drop하고 create를 자동화처리
sequence를 매일 drop하고 create해서 매일 1로 sequence값을 딸수 있도록 하고 있습니다.
그 작업을 crontab에 등록하여 매일 밤 12시에 수행하는데요. 이 작업이 성공했는지 실패했는지..로그를 남길수 있었수 있게 합니다.
cd /script/sequence
sqlplus -s /nolog<<!
connect id/password
drop sequence sq_name;
CREATE SEQUENCE SQ_NAME
START WITH 1
INCREMENT BY 1
MAXVALUE 99999
CACHE 10
CYCLE
ORDER;
이걸 clear_seq.sh로 만들어두어 이걸 매일 crontab에서 수행합니다.
log를 만들게 하려면 spool을 만들게 하고 sqlplus 접속을 nolog 옵션빼고 하면 됩니다.
시퀀스를 드롭하고 생성하는 스크립트를 만들어서 그 스크립트내에 spool 을 넣고 file_name.sql 파일을 만들면 로그를 남길수 있습니다.
spool log.txt
drop sequence sq_name;
CREATE SEQUENCE SQ_NAME
START WITH 1
INCREMENT BY 1
MAXVALUE 99999
CACHE 10
CYCLE
ORDER
/
spool off
이후 clear_seq.sh 내용
cd /script/sequence
sqlplus -s id/passwd @file_name.sql
이러면 해당 sql파일 실행이 가능합니다.
그리고 참고로 /var/spool/mail 밑에 유저명으로 crontab 에 대한 로그가 남습니다. 그것도
확인 가능합니다.
데이타를 삽입할때 데이타의 문자열의 끝에 예를들어 'emp001', 'emp002'
이런식으로 자동증가하게 sequence를 이용하고 싶을때
예제 : SELECT 'emp' || lpad(시퀀스명.nextval,3,0) FROM DUAL;
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기