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