DataBase

[DATABASE] 스토어드 프로시저

개발메모장 2025. 5. 31. 19:35

스토어드 프로시저

  • 미리 작성해두고 데이터베이스에 저장해 놓은 SQL 문들의 집합
  • 필요할 때마다 호출하여 실행할 수 있는 사용자 정의 함수 같은 개념
  • 반복적인 SQL 작업을 캡슐화해서 재사용이 가능
  • 실행 계획이 캐싱되어 성능 향상
  • 보안, 권한 제어에 유리
  • 트랜잭션 및 오류 처리 가능

기본 문법

CREATE PROCEDURE 프로시저명
    @[매개변수명] [데이터타입]
AS
BEGIN
    SQL 문
END

-- 실행시
EXEC [프로시저명] @[매개변수명]
-- 외부에서 값을 받고 싶을 때
CREATE PROCEDURE 프로시저명
    @[입력값] [데이터타입],
    @[출력값] [데이터타입] OUTPUT
AS
BEGIN
    SET @[출력값] = @[입력값]
END

-- 실행시
DECLARE @[결과값] [데이터타입]
EXEC [프로시저명] @[입력값], @[출력값] = @[결과값] OUTPUT
SELECT @[결과값]

예시

  • 학생테이블에서 특정 학교의 학생 수를 확인하는 프로시저를 만들려고 한다.

쿼리문

스토어드 프로시저 생성

-- 결과 값으로 딱히 활용 안하는 경우
CREATE PROCEDURE usp_get_student_count
	@schoolSeq INT
AS
BEGIN
	SELECT COUNT(*)
	FROM STUDENT
	WHERE STUDENT_SCHOOL = @schoolSeq
END

-- 결과 값을 가지고 뭔가 활용하려는 경우
CREATE PROCEDURE usp_get_student_count
	@schoolSeq INT,
	@studentCount INT OUTPUT
AS
BEGIN
	SELECT @studentCount = COUNT(*)
	FROM STUDENT
	WHERE STUDENT_SCHOOL = @schoolSeq
END

스토어드 프로시저 호출

-- 프로시저 결과 값만 보려는 경우
EXEC usp_get_student_count @schoolSeq = 5

-- 프로시저 결과 값으로 뭔가 활용 하려는 경우
DECLARE @count INT
EXEC usp_get_student_count @schoolSeq = 5, @studentCount = @count OUTPUT
SELECT @count

스토어드 프로시저에서 주로 사용하는 문법들

1. 변수선언 및 값 할당

DECLARE @변수명 데이터타입	-- 변수선언
SET @변수명 = 값			-- 값 할당
  • 프로시저 만들 때 전역변수와는 다른 로컬변수이다

예시)

CREATE PROCEDURE usp_Example
    @value INT -- 전역변수
AS
BEGIN
    DECLARE @count INT -- 로컬변수
    SET @count = 10    -- 값 할당
END

2. 조건문

IF 조건식
    BEGIN
        -- 조건이 참일 때 실행
    END
ELSE
    BEGIN
        -- 거짓일 때 실행
    END

3. 반복문

WHILE 조건식
BEGIN
    -- 반복 실행 블록
END

4. 트랜잭션

BEGIN TRANSACTION
-- 실행할 SQL
COMMIT
-- 또는
ROLLBACK

 


5. 예외처리

BEGIN TRY
    -- 정상 실행
END TRY
BEGIN CATCH
    -- 오류 발생 시 실행
    SELECT ERROR_MESSAGE()
END CATCH