MySQL 프로시저(Procedure)의 동적 데이터를 처리하는 방법
-- 실행
CALL INSERT_BOOK('00003','AAB',15000,'art',@RESULT);
SELECT @RESULT;
@RESULT : 0 (성공)
@RESULT : -1 (실패)
-- 작성
/* DELIMITER는 프로시저 앞,뒤의 위치하여 안에 있는 부분은 한번에 실행될 수 있게 하는 역할을 한다. */
DELIMITER $$
CREATE PROCEDURE INSERT_BOOK
(IN _BOOKID CHAR(5), IN _BOOKNAME VARCHAR(20), _PRICE DOUBLE, _BOOKTYPE VARCHAR(10), OUT RESULT INT)
/*
@DESCRIPTION
BOOKS 테이블에 인서트하고 BOOKS_SELL에 추가된 금액으로 인서트한다.
@PARAM
_BOOKID: 고유키
_BOOKNAME : 제목
_PRICE: 원가
_BOOKTYPE : 책종류
@RETURN
RESULT : 실패(-1), 성공 (0)
*/
BEGIN
/* 가격을 변경할 변수를 선언한다. */
DECLARE _SELLPRICE DOUBLE;
/* 만약 SQL에러라면 ROLLBACK 처리한다. */
DECLARE exit handler for SQLEXCEPTION
BEGIN
ROLLBACK;
SET RESULT = -1;
END;
/* 트랜젝션 시작 */
START TRANSACTION;
/* BOOK에 인서트 */
INSERT INTO BOOKS(bookID, bookName, bookOriginPrice, bookType)
VALUE(_BOOKID, _BOOKNAME, _PRICE, _BOOKTYPE);
/* 책 가격 조건문 작성 */
IF _BOOKTYPE = 'novel' THEN
SET _SELLPRICE = _PRICE + _PRICE * (10/100);
ELSEIF _BOOKTYPE = 'art' THEN
SET _SELLPRICE = _PRICE + _PRICE * (15/100);
ELSE
SET _SELLPRICE = _PRICE + _PRICE * (20/100);
END IF;
/* 위의 조건과 선언에 따른 최종 프로세스에 대한 저장. */
INSERT INTO BOOKS_SELL (bookID, bookSellPrice, bookType)
VALUE(_BOOKID, _SELLPRICE, _BOOKTYPE);
/* 커밋 */
COMMIT;
SET RESULT = 0;
END$$
DELIMITER ;INSERT_BOOK
|