728x90

오라클에서는 시퀀스명.nextval 이라는 편리한 기능이 존재하지만

MySql은 시퀀스 기능이 별도로 존재하지 않습니다.

조금 번거롭기는 하지만, 그래도 사용 할 방법은 있습니다.

 

MYSQL Sequences 역할을 대신하는 Table 생성

-- bb_smart.SEQUENCES definition

CREATE TABLE `SEQUENCES` (
  `NAME` varchar(32) DEFAULT NULL,
  `CURRVAL` bigint unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='Maria DB

 

Function 생성

CREATE DEFINER=`aiportal`@`%` FUNCTION `test_db`.`NEXTVAL`( the_name VARCHAR(32) ) RETURNS bigint unsigned
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
        DECLARE ret BIGINT UNSIGNED;
        DECLARE check_ret BIGINT UNSIGNED;
       
        SELECT count(*) INTO check_ret FROM SEQUENCES WHERE name = the_name;
       
        IF check_ret = 0 THEN
         	DELETE FROM SEQUENCES WHERE name = the_name;
        	INSERT INTO SEQUENCES VALUES(the_name, 1); 
        	set ret = 1;
        ELSE 
	        UPDATE SEQUENCES SET currval = currval +1 WHERE name = the_name;
	        SELECT currval INTO ret FROM SEQUENCES WHERE name = the_name LIMIT 1; 
       
       	END IF;
       
        RETURN ret;
END

 

사용하기

<select id="selectTESTlInOutMaxSeq" parameterType="searchVO" resultType="String">
    /* test.selectTESTlInOutMaxSeq */
    <!-- MariaDB :: SELECT NEXTVAL(SQ_VHCL_IN_OUT) -->
    SELECT NEXTVAL('SQ_VHCL_IN_OUT') FROM DUAL;
</select>
728x90

+ Recent posts