-
Mysql Numbering SP Sample♣ Tech & Biz Salon/Tech 2012. 2. 24. 15:44
최근 채번관련 가이드할일 있어서 열어본 기록. 작년에 만들었던 놈이다.
■ 채번용 Table
CREATE TABLE `t_order_seq` (
`SEQ` BIGINT(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`SEQ`)
) ENGINE=INNODBINNODB 이더라도 UNIQUE NUMBERING 이 보장되는것으로 보임.
■ SP
DELIMITER //
USE tastedb//
/*================================================================================
SP_GET_ORDER_SEQ
---------------------------------------
GET ID FOR t_order_mst.ORDER_ID, t_order_temp.ORDER_ID
e.g)
CALL SP_GET_ORDER_SEQ('Y', @R_RET);
SELECT @R_RET;
---------------------------------------
order id example : 2011010212345678 ( yyyymmdd + 8자리)
================================================================================*/
DROP PROCEDURE IF EXISTS SP_GET_ORDER_SEQ//
CREATE PROCEDURE SP_GET_ORDER_SEQ
(
IN I_PRINT_YN CHAR(1)
,OUT O_RTN_VAL CHAR(16)
)
BEGIN
DECLARE V_SEQ BIGINT;
DECLARE V_VAL_MAX BIGINT DEFAULT 99999999;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET O_RTN_VAL = '9999123199999999';
END;
-- MAIN PART ===================================
INSERT INTO t_order_seq VALUES (0);
SELECT LAST_INSERT_ID() INTO V_SEQ;
-- SELECT V_SEQ;
IF V_SEQ > V_VAL_MAX THEN
TRUNCATE TABLE t_order_seq; -- 이 구문은... 채번이 많이 될 것으로 예상하지 않는다면, 뺀다음 SP가 아닌 펑션으로 쓰는 것도 괜찮음. 허나 그런건 깔끔하지 않으므로 나는 비선호함.
INSERT INTO t_order_seq VALUES (0);
SELECT LAST_INSERT_ID() INTO V_SEQ;
END IF;
DELETE FROM t_order_seq WHERE SEQ < V_SEQ;
SET O_RTN_VAL =
CONCAT( DATE_FORMAT(CURDATE(), '%Y%m%d')
, LPAD(V_SEQ, 8, '0')
);
IF I_PRINT_YN = 'Y' THEN
SELECT O_RTN_VAL;
END IF;
END//
DELIMITER ;
'♣ Tech & Biz Salon > Tech' 카테고리의 다른 글
Mysql Numbering Function Sample (0) 2012.02.24 2012년 8월부터 인터넷 회원가입시 주민번호 수집 금지 (0) 2012.02.20 tar 특정폴더 여러개 제외 (0) 2012.02.08