Preloader image
DDD

데이터베이스

MySQL - 프로로시저(Procedure)의 동적 데이터를 처리하는 방법

작성자 관리자 (admin)
조회수 1,376
입력일 2021-10-21 08:50:06

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

^