상세 컨텐츠

본문 제목

[오라클 DB 스터디] Oracle SUBPROGRAM을 배웁니다

프로그래밍 도서

by DeepinDev 2025. 4. 30. 23:06

본문

Oracle PL/SQL을 공부하다 보면 자연스럽게 마주치는 개념 중 하나가 바로 **Subprogram(서브프로그램)**입니다. 서브프로그램은 쉽게 말해 반복해서 사용할 수 있는 코드 덩어리인데요, 그중에서도 오늘은 **프로시저(Procedure)**에 대해 자세히 알아보겠습니다.


1. 서브프로그램이란?

서브프로그램은 PL/SQL에서 일정한 기능을 수행하는 코드 블록을 재사용 가능하게 만든 것입니다. 크게 두 가지로 나눌 수 있어요:

  • 프로시저(Procedure): 특정 작업을 수행하지만, 값을 반환하지는 않음
  • 함수(Function): 어떤 결과값을 계산해서 반환함

이번 글에서는 **프로시저(Procedure)**에 집중해서 설명드릴게요.


2. 프로시저란?

**프로시저(Procedure)**는 미리 정의해둔 일련의 SQL 문장들을 이름으로 묶어놓은 것입니다. 필요할 때마다 호출해서 사용할 수 있고, 인자를 받아 처리할 수 있어 재사용성과 유지보수성이 매우 뛰어납니다.


3. 기본 구조

CREATE [OR REPLACE] PROCEDURE 프로시저명 (
   매개변수1 [IN|OUT|IN OUT] 데이터타입,
   ...
) IS
BEGIN
   -- 실행할 코드
END;
  • IN: 호출 시 값을 전달받음 (읽기 전용)
  • OUT: 호출 결과를 밖으로 전달 (쓰기 전용)
  • IN OUT: 값을 주고받을 수 있음 (읽기 + 쓰기)

4. 간단한 예제: 사원 정보 출력 프로시저

CREATE OR REPLACE PROCEDURE print_employee_name (
   p_emp_id IN employees.employee_id%TYPE
)
IS
   v_name employees.last_name%TYPE;
BEGIN
   SELECT last_name INTO v_name
   FROM employees
   WHERE employee_id = p_emp_id;

   DBMS_OUTPUT.PUT_LINE('사원 이름: ' || v_name);
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('해당 사원이 존재하지 않습니다.');
END;

호출 방법:

BEGIN
   print_employee_name(100);
END;

5. OUT 파라미터 예제: 급여 조회 프로시저

CREATE OR REPLACE PROCEDURE get_salary (
   p_emp_id IN employees.employee_id%TYPE,
   p_salary OUT employees.salary%TYPE
)
IS
BEGIN
   SELECT salary INTO p_salary
   FROM employees
   WHERE employee_id = p_emp_id;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      p_salary := 0;
END;

호출 방법:

DECLARE
   v_sal NUMBER;
BEGIN
   get_salary(100, v_sal);
   DBMS_OUTPUT.PUT_LINE('급여: ' || v_sal);
END;

6. 프로시저의 장점

  • 💡 재사용성: 여러 곳에서 반복 호출 가능
  • 🔒 보안성: 프로시저로 캡슐화해 민감한 로직을 보호
  • 🚀 성능 향상: 한번 컴파일된 후 빠르게 실행
  • 🛠 유지보수 용이: 수정 시 프로시저 하나만 고치면 됨

7. 마무리

프로시저는 단순 반복 작업을 자동화하거나, 여러 SQL 문을 묶어 관리할 때 매우 유용합니다.
업무 로직을 분리해 깔끔한 코드를 만들고, 유지보수까지 쉽게 해주는 PL/SQL의 핵심 기능이죠.

다음 글에서는 함수(Function)와의 차이점, 그리고 트리거와 함께 활용하는 예제도 소개해볼게요!

 

관련글 더보기

댓글 영역