날짜를 포함한 시퀀스가 필요해서 만들어 봤습니다.
날마다 시퀀스가 1로 초기화 돼야 해서 생각보다는 복잡합니다.
1. 시퀀스 생성
2. 시퀀스를 1로 초기화하는 프로시저 생성
3. 프로시저를 오라클 job에 등록
4. 날짜를 포함한 시퀀스 값을 가져오는 함수를 생성
2. 시퀀스를 1로 초기화하는 프로시저 생성
3. 프로시저를 오라클 job에 등록
4. 날짜를 포함한 시퀀스 값을 가져오는 함수를 생성
1. 시퀀스 생성
- 저는 3자리 시퀀스가 필요해서 MAX 999까지만 설정했습니다.
1 2 3 4 5 6 7 8 9 | /* 배치키 시퀀스 */ CREATE SEQUENCE SEQ_BATCHKEY START WITH 1 MAXVALUE 999 MINVALUE 1 CYCLE CACHE 10 NOORDER ; | cs |
2. 시퀀스를 1로 초기화하는 프로시저 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* 시퀀스 초기화 Procedure */ CREATE OR REPLACE PROCEDURE SZP_BATCHKEY_RESET(SEQ_NAME IN VARCHAR2) IS L_VAL NUMBER; BEGIN EXECUTE IMMEDIATE 'SELECT '|| SEQ_NAME ||'.NEXTVAL FROM DUAL' INTO L_VAL; EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| SEQ_NAME ||' INCREMENT BY -'|| L_VAL ||' MINVALUE 0'; EXECUTE IMMEDIATE 'SELECT '|| SEQ_NAME ||'.NEXTVAL FROM DUAL' INTO L_VAL; EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| SEQ_NAME ||' INCREMENT BY 1 MINVALUE 0'; END; | cs |
3. 프로시저를 오라클 job에 등록한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X , what => 'BEGIN SZP_BATCHKEY_RESET(''SEQ_BATCHKEY''); END;' , next_date => to_date('05-31-2017 00:00:00', 'mm/dd/yyyy hh24:mi:ss') , interval => 'TRUNC(SYSDATE+1)' , no_parse => FALSE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is : '|| to_char(X)); END; | cs |
4. 날짜를 포함한 시퀀스 값을 가져오는 함수를 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | CREATE OR REPLACE FUNCTION ZBF_GET_BATCHKEY( p_type in varchar2 ) RETURN VARCHAR2 AS v_returnValue VARCHAR2(180); BEGIN BEGIN select TO_CHAR(SYSDATE, 'YYMMDD') || LPAD(SEQ_BATCHKEY.nextval, 3, 0) into v_returnValue from dual; EXCEPTION WHEN NO_DATA_FOUND THEN v_returnValue := ' '; WHEN OTHERS THEN v_returnValue := ' '; END; RETURN v_returnValue; END; | cs |
이렇게 모두 생성이 되었다면 이런식으로 호출하면 되겠죠.
1 | select ZBF_GET_BATCHKEY('now') from DUAL; | cs |
제가 만들고 실행해보니 아래처럼 결과가 잘 나옵니다.
'프로그래밍 언어 > 쿼리문 + Oracle + MySQL' 카테고리의 다른 글
[오라클] 동적쿼리를 실행해서 원하는 값을 가져오는 Oracle 함수 예제 (0) | 2017.06.23 |
---|---|
[Oracle] 오라클 락(lock) 걸렸을 때 사용할 유용한 쿼리들 (0) | 2017.06.08 |
[Oracle] 오라클 함수(Function)에서 DML(Insert/update/delete)문 사용하기 (0) | 2017.05.26 |
[Oracle] 오라클 export 배치 스크립트 만들어 윈도우 스케쥴러에 등록하여 자동 백업하고 삭제하는 방법 (0) | 2017.05.25 |
[ErWin] Subject Area(주제영역) 만들기 (0) | 2017.05.22 |
댓글