최신 게시글(DB)
2017.04.26 / 20:12

Select 후 바로 Update Function

tomcater
추천 수 150

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



출처: http://kimyhcj.tistory.com/185 [아율아빠의 스토리]