Select 후 바로 특정 column 을 +1 해야 하는 경우에 사용하는 Function 만들기
요구사항 1. 통신시 사용하는 전문번호를 DB에서 관리하고자 한다.
요구사항 2. 전문번호는 매일 1번부터 시작한다.
요구사항 3. 전문번호는 겹치지 않는다.
Select 후 시퀀스 넘버를 바로 update 해야 하는 경우 Spring Service Interface 를 하나의 Transaction으로 묶어서 처리 하면
두번의 query를 날려도 무관하나 하나의 쿼리를 통해 처리하는 것이 더욱 시퀀스 넘버를 안전하게 관리할 수 있기 때문에 아래와 같이
Function을 만들어 처리 한다. (Select 후 바로 update)
CREATE FUNCTION kbsavings_get_msgno () RETURNS INT
BEGIN
DECLARE msg_no INT;
SELECT value
INTO msg_no
FROM kbsavings_otp
WHERE name = CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '_', 'msg_no');
IF msg_no IS NULL THEN
INSERT INTO kbsavings_otp (name, value)
VALUES ( CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '_', 'msg_no'), 1 );
SELECT 1 INTO msg_no;
END IF;
UPDATE kbsavings_otp
SET value = value + 1
WHERE name = CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '_', 'msg_no');
RETURN msg_no;
END
'IT > DBMS 공통' 카테고리의 다른 글
database convert latin1 to utf-8 (0) | 2014.09.15 |
---|---|
Oracle DBLink 와 비슷한 MySQL FEDERATED ENGINE (0) | 2014.04.07 |
옵티마이저 - 상세 (옵티마이저 목표의 선택, 실행계획의 고정화) (0) | 2014.03.11 |
옵티마이저 (0) | 2014.02.25 |
대용량 데이터베이스 솔루션 - 함수 기반 인덱스 (0) | 2014.02.18 |