[DB] MySQL에서 오라클의 nextval 사용하기

du·2022년 6월 19일
0

DB

목록 보기
1/2

MySQL 에는 시퀀스가 없어 Oracle의 nextval, currval 을 사용할 수 없다.
그렇지만 프로시저와 함수를 통해 시퀀스 기능을 사용할 수 있다.

예시

1. 시퀀스 테이블

CREATE TABLE TBL_SEQUENCES (
	NAME VARCHAR(32),
    CURRVAL BIGINT UNSIGNED
) ENGINE = InnoDB;

2. 시퀀스 생성 프로시저

/* 구분문자(;->$$로 변경) 프로시저 생성 시 ;이 포함되므로 변경 필요*/
DELIMITER $$
CREATE PROCEDURE `create_seq` (IN seq_name text)
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
	DELETE FROM TBL_SEQUENCES WHERE NAME = seq_name;
    INSERT INTO TBL_SEQUENCES VALUES(seq_name, 0);
END
$$

3. nextval 함수

CREATE FUNCTION `nextval` (seq_name VARCHAR(32))
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
	DECLARE RET BIGINT UNSIGNED;
	UPDATE TBL_SEQUENCES SET currval = currval + 1 WHERE NAME = seq_name;
    SELECT CURRVAL INTO ret FROM TBL_SEQUENCES WHERE NAME = seq_name;
    RETURN ret;
END
$$

4. 시퀀스 생성 프로시저 실행 및 시퀀스 사용

DELIMITER ;
CALL create_seq('test_seq');
SELECT nextval('test_seq') FROM DUAL;

결과

아래와 같이 호출 시 마다 +1 된 값이 리턴된다.

참고자료

0개의 댓글