Procedure and Function

김기현·2025년 6월 19일

Database

목록 보기
23/24

프로시저(Procedure)와 함수(Function)은 사용자 정의 루틴(User Defined Routine, UDR)이라고 불리며, SQL문을 반복적으로 실행하거나, 비즈니스 로직을 캡슐화할 때 사용된다.
둘 다 비슷하지만 용도, 반환값, 사용 방식에서 차이가 있다.

프로시저 (Stored procedure)

  • 하나 이상의 SQL문을 미리 저장해 놓은 이름 있는 블록.
  • 호출할 대마다 실행된다.
  • 보통 데이터 변경(INSERT/UPDATE/DELETE) 또는 복잡한 비즈니스 로직 처리에 사용된다.

특징

항목설명
반환값있을 수도 있고 없을 수도 있음 (OUT 파라미터 사용)
트랜잭션내부에서 시작하거나 제어 가능
호출 방법CALL procedure_name(...)
주 용도데이터 처리, 로깅, 복합 작업, 배치 처리 등

예제

MySQL 기준 예제이다.

DELIMITER //

CREATE PROCEDURE add_emp(
    IN emp_name VARCHAR(50),
    IN emp_age INT
)
    
BEGIN
    INSERT INTO employee (name, age)
    VALUES (emp_name, emp_age);
END //

DELIMITER ;

-- 호출
CALL add_emp('홍길동', 30);

함수 (Function)

  • 특정 작업을 수행하고 결과값을 반환하는 루틴.
  • 일반적으로 SELECT 쿼리에서 사용된다.

특징

항목설명
반환값반드시 있어야 함
트랜잭션트랜잭션 제어 불가능 (보통 읽기 전용)
호출 방법SELECT function_name(...)
주 용도계산, 포맷 변환, 값 반환 등

예제

MySQL 기준 예제이다.

DELIMITER //

CREATE FUNCTION get_full_name(
    first_name VARCHAR(50),
    last_name VARCHAR(50)
)
    RETURNS VARCHAR(100)
    DETERMINISTIC
BEGIN
    RETURN CONCAT(last_name, ' ', first_name);
END //

DELIMITER ;

-- 호출
SELECT get_full_name('기현', '김');
-- 결과: '김 기현'

프로시저와 함수의 차이점

구분프로시저 (Procedure)함수 (Function)
반환값RETURN X (OUT/INOUT 파라미터로 반환)RETURN 필수
호출 방식CALLSELECT, WHERE, SET 등에서 사용
목적복잡한 로직 처리, 데이터 변경계산식, 변환, 하나의 값 반환
트랜잭션시작/커밋 가능트랜잭션 시작 불가 (읽기 위주)
내부 SQLDML (INSERT/UPDATE/DELETE) 가능일반적으로 SELECT만 허용

각 상황 별 사용

상황선택
반복적으로 실행해야 하는 작업이 있을 때프로시저
복잡한 SELECT 계산이 있을 때함수
여러 개의 작업을 순차적으로 처리해야 할 때프로시저
쿼리에서 값을 계산해서 바로 써야 할 때함수

다른 팁

  • 프로시저는 IF, LOOP, CURSOR 등을 써서 복잡한 흐름을 만들 수 있다.
  • 함수는 보통 순수 함수(Pure Function) 성격이 강하며, 입력 - 출력 구조이다.
  • 일부 DBMS(Oracle, ProstgreSQL 등)에서는 함수 내에서 DML이 가능하지만 MySQL에서는 제한적이다.
profile
백엔드 개발자를 목표로 공부하는 대학생

0개의 댓글