본문으로 건너뛰기

Stored Program

경고

; 은 mysql 에서 명령을 구분하는 기호로 인식하는 데, Stored Program에서 프로그램을 정의하기 위해서도 ;을 사용하므로 일시적으로 DELIMITER $$ 명령을 통해 구분자를 ;에서 $$로 변경해야 합니다.

프로그램 정의가 끝난 후엔 다시 ;로 변경해야 합니다.

PROCEDURE

CREATE PROCEDURE

DELIMITER $$
CREATE PROCEDURE <func>(
[<param> <type>[,<param> <type>]]
)
BEGIN
<statement>;
[<statement>;]
END
$$
DELIMITER ;

DROP PROCEDURE

DROP PROCEDURE <func>

CALL PROCEDURE

CALL <func>([<arg>[,<arg>]])

DECLARE

경고

Local variable -> CURSOR -> HANDLER 순으로 선언해야 합니다.

DECLARE Local variable

DECLARE <var>[,<var>] ... <type> [DEFAULT <value>]

DECLARE CURSOR

DECLARE <cursor> CURSOR FOR <select_statement>
OPEN <cursor>;
FETCH <cursor> INTO <var>[,<var>];
CLOSE <cursor>;

DECLARE HANDLER

DECLARE <action> HANDLER FOR <condition>[,<condition>]
<statement>

LOOP

CREATE PROCEDURE test()
BEGIN
DECLARE tn, ts VARCHAR(50);
DECLARE done INT DEFAULT FALSE;

DECLARE cur CURSOR FOR SELECT table_name, table_schema FROM information_schema.tables;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP
FETCH cur INTO tn, ts;
IF done THEN
LEAVE read_loop;
END IF;

SELECT tn, ts;
END LOOP;

CLOSE cur;
END