1. 시퀀스를 저장할 테이블 생성

CREATE TABLE `TB_SEQUENCE` (
	`SEQ_NM`	VARCHAR(30)	NOT NULL	COMMENT '시퀀스명',
	`CURRVAL`	BIGINT	NULL	COMMENT '현재 값'
);

ALTER TABLE `TB_SEQUENCE` ADD CONSTRAINT `PK_TB_SEQUENCE` PRIMARY KEY (
	`SEQ_NM`
);

2. 시퀀스를 생성하는 프로시저 생성

DELIMITER $$
    CREATE PROCEDURE `create_sequence` (IN the_name text)
    MODIFIES SQL DATA
    DETERMINISTIC
    BEGIN
        DELETE FROM TB_SEQUENCE WHERE SEQ_NM = the_name;
        INSERT INTO TB_SEQUENCE VALUES(the_name, 0);
   END

3. 시퀀스의 다음 값을 가져오는 함수 생성

DELIMITER $$
    CREATE FUNCTION `nextval` (the_name VARCHAR(30))
    RETURNS BIGINT UNSIGNED
    MODIFIES SQL DATA
    DETERMINISTIC
    BEGIN
        DECLARE ret BIGINT UNSIGNED;
        UPDATE TB_SEQUENCE SET CURRVAL = CURRVAL +1 WHERE SEQ_NM = the_name;
        SELECT CURRVAL INTO ret FROM TB_SEQUENCE WHERE SEQ_NM = the_name LIMIT 1;
        RETURN ret;
   END

4. 프로시저를 이용해 시퀀스 생성 및 nextval 조회

CALL create_sequence('Test');	#시퀀스 생성

SELECT nextval('Test') FROM DUAL;	#nextval 조회

# 오류 사례 1

  • 시퀀스의 다음 값을 가져오는 함수 생성할 때 아래와 같은 오류 발생
DELIMITER $$
    CREATE FUNCTION `nextval` (the_name VARCHAR(30))
    RETURNS BIGINT UNSIGNED
    MODIFIES SQL DATA
    DETERMINISTIC
    BEGIN
        DECLARE ret BIGINT UNSIGNED;
        UPDATE TB_SEQUENCE SET CURRVAL = CURRVAL +1 WHERE SEQ_NM = the_name;
        SELECT CURRVAL INTO ret FROM TB_SEQUENCE WHERE SEQ_NM = the_name LIMIT 1;
        RETURN ret;
   END
   

/* SQL 오류 (1419): You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable) */
  1. aws접속 후 파라미터 변경

image-20230404203603336

  1. Confluence 권한 부여
GRANT ALL PRIVILEGES ON confluence.* TO 'hpp(계정 이름)'@'%';
  1. DB 재실행

  2. 기존 소스 실행

DELIMITER $$
    CREATE FUNCTION `nextval` (the_name VARCHAR(30))
    RETURNS BIGINT UNSIGNED
    MODIFIES SQL DATA
    DETERMINISTIC
    BEGIN
        DECLARE ret BIGINT UNSIGNED;
        UPDATE TB_SEQUENCE SET CURRVAL = CURRVAL +1 WHERE SEQ_NM = the_name;
        SELECT CURRVAL INTO ret FROM TB_SEQUENCE WHERE SEQ_NM = the_name LIMIT 1;
        RETURN ret;
   END

참고

MySql에서 Sequence 기능을 사용하는 방법

aws파라미터 변경

MySQL 1419 error - “You do not have the SUPER privilege and binary logging is enabled” 해결 방법

태그:

카테고리:

업데이트: