2024년 6월 28일 금요일

ORACLE DB - SEQUENCE


/***********************************************

Oracle DB 계정 생성

Oracle 19c 기준으로 작성되었습니다.
***********************************************/

/********************************************************
시퀀스 생성
시퀀스명: SEQ_TEST_1
STR 계정 접속
********************************************************/

-- 시퀀스 생성
CREATE SEQUENCE STR.SEQ_TEST_1
MINVALUE 1
MAXVALUE 999999999
INCREMENT BY 1
START WITH 1
CACHE 20
ORDER
CYCLE;

-- 시퀀스 상태
SELECT
SEQUENCE_NAME,
LAST_NUMBER,
MIN_VALUE,
MAX_VALUE,
LENGTH(MAX_VALUE) AS "LENGTH",
INCREMENT_BY,
CYCLE_FLAG,
ORDER_FLAG,
CACHE_SIZE
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_TEST_1';


/********************************************************
시퀀스 사용 방법
STR 계정 접속
********************************************************/

-- 시퀀스 다음 값 생성
SELECT STR.SEQ_TEST_1.NEXTVAL FROM DUAL;

-- 시퀀스 현재 상태 값
SELECT STR.SEQ_TEST_1.CURRVAL FROM DUAL;

-- 시퀀스 증가 번호 변경
ALTER SEQUENCE STR.SEQ_TEST_1 INCREMENT BY 1;

-- 시퀀스 시작 번호 변경
ALTER SEQUENCE STR.SEQ_TEST_1 RESTART START WITH 1;


/********************************************************
시퀀스 꿀팁
STR 계정 접속
********************************************************/

SELECT STR.SEQ_TEST_1.NEXTVAL FROM DUAL;

SELECT TO_CHAR(STR.SEQ_TEST_1.NEXTVAL,'FM000000000') FROM DUAL;

SELECT
TO_CHAR(SYSDATE, 'YYYYMMDD') ||
TO_CHAR(STR.SEQ_TEST_1.NEXTVAL, 'FM000000000')
FROM DUAL;


/********************************************************
테이블 생성(시퀀스 사용을 위한 테이블 생성)
STR 계정 접속
********************************************************/

-- 테이블 생성
CREATE TABLE STR.TEST
(
TEST_NO VARCHAR2(20)
)
TABLESPACE TS_STR_D;

-- 10건 데이터 입력
INSERT INTO STR.TEST
SELECT
TO_CHAR(SYSDATE, 'YYYYMMDD') ||
TO_CHAR(STR.SEQ_TEST_1.NEXTVAL, 'FM000000000') "TEST_NO"
FROM DUAL
CONNECT BY LEVEL <= 10;

COMMIT;

-- 데이터 조회
SELECT * FROM STR.TEST;

-- 시퀀스 현재 상태 값
SELECT STR.SEQ_TEST_1.CURRVAL FROM DUAL;

-- 시퀀스 증가 번호 변경
ALTER SEQUENCE STR.SEQ_TEST_1 INCREMENT BY 1;



/********************************************************
고객 번호 시퀀스 생성 예제
시퀀스명: SEQ_CUST_1
STR 계정 접속
********************************************************/

-- 시퀀스 생성
CREATE SEQUENCE STR.SEQ_CUST_1
MINVALUE 1
MAXVALUE 99999999
INCREMENT BY 1
START WITH 1
CACHE 20
ORDER
CYCLE;

-- 고객 번호 생성
SELECT
TO_CHAR(SYSDATE,'YYYYMMDD') ||
DBMS_RANDOM.STRING('U',4) ||
TO_CHAR(STR.SEQ_CUST_1.NEXTVAL,'FM00000000') AS "CUST_NO"
FROM DUAL
CONNECT BY LEVEL <= 5;

-- 오브젝트 삭제
SELECT
'DROP '||OBJECT_TYPE||' STR.'||OBJECT_NAME||';'
FROM USER_OBJECTS
WHERE OBJECT_NAME IN ('SEQ_CUST_1','SEQ_TEST_1','TEST');

[출처] DB보다


댓글 없음:

댓글 쓰기

ORACLE DB - INDEX

  /***********************************************   Oracle DB 인덱스 생성    Oracle 19c 기준으로 작성되었습니다.  *****************************************...