본문 바로가기
IT/DBMS 공통

Select 후 바로 Update Function

by 최고영회 2014. 3. 18.
728x90
반응형
SMALL

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



728x90
반응형
LIST