본문 바로가기
Database/MYSQL

Mysql procedure LEAVE 처리 하는 방법

by 반화넬 2023. 9. 5.
반응형

Mysql procedure LEAVE
Mysql procedure


안녕하세요.

프로시져를 사용하면서 트랜잭션을 이용해서 롤백을 해도 되지만 Myisam이나 다른 엔진을 사용할경우 롤백없이 그냥 에러처리를하고 싶거나 아니면 그냥 프로시져를 중단하고 싶을때 사용해도 될것 같아서 공유합니다. 

명령문 LEAVE은 지정된 레이블을 이용해서 종료 처리

 

LEAVE label;

CREATE PROCEDURE sp_name()
sp: BEGIN
    IF condition THEN
        LEAVE sp;
    END IF;
    -- other statement
END$$




label명을 sp로 생성해서 해당 에러가 발생시 종료 시키는 예시 프로시져입니다. 


DELIMITER $$

CREATE PROCEDURE CheckCredit(
    inCustomerNumber int
)
sp: BEGIN
    
    DECLARE customerCount INT;

    -- check if the customer exists
    SELECT 
        COUNT(*)
    INTO customerCount 
    FROM
        customers
    WHERE
        customerNumber = inCustomerNumber;
    
    -- if the customer does not exist, terminate
    -- the stored procedure
    IF customerCount = 0 THEN
        LEAVE sp;
    END IF;
    
    -- other logic
    -- ...
END$$

DELIMITER ;

 

LEAVE루프에서 문 사용


해등 문장에서 보시면 customerCount = 0 일경우 빠져나오는 구문입니다. 

대부분 해당 종료의 경우 Loop 절에서 많이 사용하지만  Break를 하고 싶때도 사용하기도 하는것 같아요.

반복문을 이용하는 방법은 아래 예제를 보시면 이해가 빠를것 같습니다.

DELIMITER $$

CREATE PROCEDURE LeaveDemo(OUT result VARCHAR(100))
BEGIN
    DECLARE counter INT DEFAULT 1;
    DECLARE times INT;
    -- generate a random integer between 4 and 10
    SET times  = FLOOR(RAND()*(10-4+1)+4);
    SET result = '';
    disp: LOOP
        -- concatenate counters into the result
        SET result = concat(result,counter,',');
        
        -- exit the loop if counter equals times
        IF counter = times THEN
            LEAVE disp; 
        END IF;
        SET counter = counter + 1;
    END LOOP;
END$$

DELIMITER ;


저장된 프로그램을 종료하거나 루프를 종료하기 위해 MySQL 프로시져에서의 LEAVE 알고 보면 어렵지 않으시죠?
프로시져를 사용하다보면 더욱 편하게 SQL 작성이 가능해집니다.

감사합니다.

반응형