“저장 프로시저”의 약자로, 데이터베이스에 저장해두고 반복적으로 실행할 수 있는 SQL 쿼리의 집합이다.
일단 들어가기에 앞서 본 글은 MySQL을 기준으로 작성되었음을 알림.
DELIMITER //
CREATE PROCEDURE 프로시저명(
IN 매개변수1 데이터형,
OUT 매개변수2 데이터형,
...
)
BEGIN
-- 실행할 쿼리문 작성
-- 변수 선언
DECLARE 지역변수1 타입;
-- SQL 로직
SQL문1;
SQL문2;
...
END //
DELIMITER ;
DELIMITER
기본 구분자인 ; 를 임시로 // 등으로 변경하여 프로시저 내부의 ; 와 구분함.
MySQL에서 여러 줄의 쿼리를 작성할 때 사용.
마지막에 다시 ; 로 복원 필요.
CREATE PROCEDURE
프로시저 정의 시작.
IN
입력값.
호출시 값을 넘겨줌.
읽기만 가능, 쓰기 불가능.
OUT
출력값.
결과를 외부로 전달 가능.
INOUT
입출력 모두 가능한 변수.
가독성, 협업, 명시성을 위해 IN/OUT/INOUT 구분 사용 권장.
BEGIN ~ END
프로시저 내부 코드 블록.
여러 SQL문 포함 가능.
DECLARE
지역 변수 선언.
BEGIN 블록 안에서만 사용 가능.
@ 변수명
세션 전체에서 유효한 변수(세션 변수) 선언.
BEGIN 블록 밖에서도 사용 가능.
SELECT ... INTO 변수명
SELECT 결과를 변수에 담을 때 사용.
BEGIN 블록 안에서만 사용 가능.
SET
변수에 값 할당.
일반 SQL에서도 사용 가능한 문법.
CALL 프로시저명(매개변수1, 매개변수2, ...);
CALLDELIMITER //
CREATE PROCEDURE HelloUser(
IN p_name VARCHAR(50),
OUT p_greeting VARCHAR(100)
)
BEGIN
SET p_greeting = CONCAT('Hello, ', p_name, '!');
END //
DELIMITER ;
SET @msg = '';
CALL HelloUser("Peter Parker", @msg);
SELECT @msg;