MySQL의 프로시져는 return 이 없다.
코드를 구현하다보면 종료가 필요하기 마련인데 LEAVE 를 이용하면 return 과 비슷한 기능을 보여준다.
프로시저 시작하는 BEGIN 앞에 [BLOCK 이름] : 넣어주면 LEAVE [BLOCK이름]; 사용하여 종료할 수 있다.
DELIMITER $$
CREATE PROCEDURE sp_procedure_ex( IN vDoc VARCHAR(13), IN vSequenceID VARCHAR(256) )
BEGIN
DECLARE iResult INT DEFAULT(0);
DECLARE iSQLDoc VARCHAR(13);
PROC_RETURN : BEGIN -- BLOCK NAME 설정 (RETURN 유사 기능 처리. LEAVE -> BREAK 비슷)
IF NOT CHAR_LENGTH(vDoc) = 13 THEN -- iDoc의 길이가 13 이지 않으면 반환
SET iResult = 99999;
LEAVE PROC_RETURN;
END IF;
SELECT doc INTO iSQLDoc FROM docTBL WHERE doc = vDoc;
SET @SQL_Query = CONCAT('INSERT INTO sequenceTBL VALUES("', iSQLDoc, '", "', vDoc, '") ');
PREPARE curQuery FROM @SQL_Query;
EXECUTE curQuery;
DEALLOCATE PREPARE curQuery;
SELECT 0;
END PROC_RETURN; -- BLOCK NAME 설정 해제. LEAVE PROC_BODY; 이면 여기 이후로 실행.
IF 0 <> iResult THEN
SELECT iResult;
ELSE
SELECT 0;
END IF;
END$$
DELIMITER ;
참고 :
https://artiiicy.tistory.com/15
https://stormpy.tistory.com/93
'[ Programing ] > Database' 카테고리의 다른 글
[MySQL] INSERT, UPDATE 동시 하는 쿼리. (0) | 2023.05.22 |
---|---|
[MySQL] Procedure 예외처리, 경고 처리. (0) | 2023.05.09 |
[MySQL] SQL 문 병합. UNION / UNION ALL (0) | 2023.05.08 |
[MySQL] NULL -> 0 변경. COALESCE, IFNULL (0) | 2023.05.08 |
[MySQL] 시퀀스(Identity)의 AUTO_INCREMENT 와 LAST_INSERT_ID() (0) | 2023.05.08 |