MySql 에서 Oracle nextval 구현

2017. 12. 4. 08:36공유

반응형

CREATE TABLE sequence (
sequence_name varchar(100) NOT NULL, -- 시퀀스 이름
sequence_increment int(11) unsigned NOT NULL DEFAULT 1, -- 시퀀스 증가 값에 사용한다.
sequence_min_value int(11) unsigned NOT NULL DEFAULT 1, -- 시퀀스의 최소 값
sequence_max_value bigint(20) unsigned NOT NULL DEFAULT 18446744073709551615, -- 시퀀스의 최대 값
sequence_cur_value bigint(20) unsigned DEFAULT 1, -- 시퀀스의 현재 값
sequence_cycle boolean NOT NULL DEFAULT FALSE, -- 시퀀스가 맥스 값을 초과 하였을때 다시 시작했는지 여부
PRIMARY KEY (sequence_name)
);


INSERT INTO sequence (sequence_name, sequence_cur_value) VALUES('sq_name', 1000);


 

CREATE FUNCTION nextval (seq_name varchar(100))
RETURNS bigint(20) NOT DETERMINISTIC
BEGIN
DECLARE cur_val bigint(20);
SELECT
sequence_cur_value INTO cur_val
FROM
sequence
WHERE
sequence_name = seq_name
;
IF cur_val IS NOT NULL THEN
UPDATE
sequence
SET
sequence_cur_value = IF (
(sequence_cur_value + sequence_increment) > sequence_max_value,
IF (
sequence_cycle = TRUE,
sequence_min_value,
NULL
),
sequence_cur_value + sequence_increment
)
WHERE
sequence_name = seq_name
;
END IF;
RETURN cur_val;
END;

 

SELECT nextval('sequence_name')

 

반응형