
SQL 쿼리의 집합으로, 특정 동작을 일괄 처리하기 위한 용도로 사용됨.
CALL 프로시저_이름();)ALTER 문으로 저장 프로시저의 매개변수나 바디 수정 불가 → 삭제 후 재생성 필요 ❌Function 사용) ➡ RETURN 사용 불가IN: 입력 전용OUT: 출력 전용INOUT: 입력 및 출력 가능IF 조건식 THEN 실행문;
ELSE 실행문;
END IF;
CASE
WHEN 조건1 THEN 실행문;
WHEN 조건2 THEN 실행문;
ELSE 실행문;
END;
WHILE 조건식 DO 실행문; END WHILE;
사용자가 직접 만들어 사용하는 함수로, 저장 프로시저와 유사하지만 반환값이 필수
SELECT 문 안에서 호출 가능IN, OUT 매개변수 사용 불가 (모든 매개변수는 입력 전용)RETURN 문을 통해 단일 값 반환SELECT INTO를 제외한 SELECT 사용 불가| 구분 | Stored Function | Stored Procedure |
|---|---|---|
| 매개변수 | IN만 사용 가능 | IN, OUT, INOUT 사용 가능 |
| 반환값 | RETURN 필수 | RETURN 없음 (필요 시 OUT 사용) |
| 호출 방식 | SELECT 문에서 호출 | CALL 사용 |
SELECT 사용 | 제한적 (SELECT INTO 가능) | 자유롭게 사용 가능 |
drop function if exists getAgeFunc;
delimiter $$
create function getAgeFunc(bYear int)
returns int deterministic no sql
begin
declare age int;
set age = year(curdate()) - bYear;
return age;
end $$
delimiter ;
SELECT getAgeFunc(1999) AS '나이';
저장 프로시저 내부에서 사용되며, 테이블에서 여러 개의 행을 조회 후 한 행씩 처리할 수 있도록 지원
DECLARE CURSORDECLARE CONTINUE HANDLER (더 이상 읽을 행이 없을 경우 대비)OPENFETCHCLOSELOOP ~ END LOOP로 반복테이블에 DML(INSERT, UPDATE, DELETE) 이벤트가 발생할 때 자동으로 실행되는 기능
IN, OUT 매개변수 사용 불가MySQL에서는 VIEW에 트리거 사용 불가AFTER 트리거BEFORE 트리거NEW, OLD)INSERT, UPDATE, DELETE 작업 시 자동 생성됨NEW: 새롭게 삽입되거나 변경된 값OLD: 기존 값CREATE TRIGGER before_user_insert
BEFORE INSERT ON usertbl
FOR EACH ROW
SET NEW.created_at = NOW();