Notice
Recent Posts
Recent Comments
Link
관리 메뉴

데브마우스

[SQL] 스토어드 프로시저(함수), PREPARE와 EXECUTE 정리 본문

데이터베이스/SQL: 정리

[SQL] 스토어드 프로시저(함수), PREPARE와 EXECUTE 정리

데브마우스 2024. 1. 4. 08:55

스토어드 프로시저란 무엇인가요?

  • 스토어드 프로시저는 MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스의 개체입니다.
  • SQL의 프로그래밍은 스토어드 프로시저 안에서 작성되어야 합니다.

스토어드 프로시저는 어떻게 작성하나요?

아래는 스토어드 프로시저 코드 형식입니다.

프로시저를 실행하기 위해서는 CREATE PROCEDURE를 한 번 실행하신 후 CALL 스토어_프로시저_이름();으로 프로시저를 호출할 수 있습니다. $$ 대신 다른 특수문자(/, & 등)도 사용이 가능합니다.

DELIMITER $$ -- DELIMITER와 특수문자 사이에 공백이 있습니다.
CREATE PROCEDURE 스토어드_프로시저_이름()
BEGIN
        -- SQL 프로그래밍 코드
END $$
DELIMITER ; -- 띄워쓰기에 주의하셔야 합니다.

CALL 스토어드_프로시저_이름(); -- 프로시저를 호출하는 코드입니다.

스토어드 프로시저 안에는 무엇이 작성될 수 있나요?

들어갈 수 있는 코드 설명 코드 형식
IF 조건문으로 IF 조건식이 참이면 실행하고 아니면 실행하지 않습니다. IF <조건식> THEN
-- SQL 코드
END IF;
IF ~ ELSE 조건문으로 IF 조건문이 참이면 IF의 코드를 실행하고 아니면 ELSE의 코드를 실행합니다. IF <조건식> THEN
-- SQL 코드
ELSE
-- SQL 코드
END IF;   
CASE 여러가지 조건 중에서 선택해야하는 경우 CASE 문을 사용합니다. CASE
WHEN 조건1 THEN
-- SQL 코드1
WHEN 조건2 THEN
--  SQL 코드2
ELSE
--  SQL 코드4
END CASE;
WHILE WHILE 문은 조건식이 참인 동안 SQL 코드를 반복해서 실행합니다. WHILE <조건식> DO
-- SQL 코드
END WHILE;
ITERATE
(
WHILE에서 사용)
지정한 레이블로 가서 계속 진행합니다.
Java의 continue와 비슷하며 C언어의 GOTO와 비슷하기도 합니다.
ITERATE [레이블]:
LEAVE
(WHILE에서 사용)
지정한 레이블로 빠져나갑니다.
WHILE문을 종료합니다.
Java의 break와 비슷합니다.
LEAVE [레이블];

 

PREPARE와 EXECUTE

PREPARE는 SQL문을 실행하지 않고 미리 준비만 해둡니다.

실행이 필요한 시점에서 EXECUTE로 준비한 SQL문을 실행합니다.

PREPARE와 EXECUTE를 실행 하신 후 DEALLOCATE PREPARE로 문장을 해제시켜주셔야 합니다.

 

아래는 예제 코드입니다.

create table gate_table (id int auto_increment primary key, entry_time year);

SET @curDate = YEAR(CURRENT_TIMESTAMP()); -- 현재 년도를 변수 처리합니다..

PREPARE myQuery FROM 'INSERT INTO gate_table values(null, ?)';
EXECUTE myQuery USING @curDate;
DEALLOCATE prepare myQuery;

SELECT * FROM gate_table;