[Oracle 프로시저] 기본 구조와 생성, 실행 방법

프로시저는 정해진 문법 구조에 따라 작성해야 하며, 생성(Create)과 실행(Execute)은 별개의 과정으로 이루어집니다. 이번 포스팅에서는 프로시저를 만드는 가장 기본적인 뼈대와 실행 방법을 알아보겠습니다.

## 프로시저의 기본 구조 (뼈대) 🏗️

모든 PL/SQL 블록은 기본적으로 선언부, 실행부, 예외 처리부로 나뉩니다. 프로시저 역시 이 구조를 따릅니다.

CREATE [OR REPLACE] PROCEDURE procedure_name
    ( argument1 [IN|OUT|IN OUT] datatype,
      argument2 [IN|OUT|IN OUT] datatype, ... )
IS
    -- 변수, 상수, 커서 등을 선언하는 부분 (선언부)
    v_variable_name VARCHAR2(100);
BEGIN
    -- 실제 로직이 들어가는 부분 (실행부)
    -- SELECT, INSERT, UPDATE, DELETE, IF, LOOP 등
    -- 여기에 SQL 문장과 PL/SQL 로직을 작성합니다.

EXCEPTION
    -- 오류 발생 시 처리하는 부분 (예외 처리부)
    WHEN OTHERS THEN
        -- 오류 처리 로직
END [procedure_name];
/
  • CREATE OR REPLACE PROCEDURE: 프로시저를 생성하는 명령어입니다. OR REPLACE 옵션을 사용하면, 동일한 이름의 프로시저가 이미 존재할 경우 덮어쓰기를 하여 편리하게 수정할 수 있습니다.
  • procedure_name: 생성할 프로시저의 고유한 이름입니다.
  • 파라미터 선언부 ( ... ): 프로시저가 외부로부터 값을 받거나 외부로 값을 반환하기 위한 변수(파라미터)를 정의하는 부분입니다. (다음 포스팅에서 자세히 다룹니다.)
  • IS (또는 AS): PL/SQL 블록의 시작을 알리는 키워드입니다.
  • BEGIN ... END;: 실제 실행될 코드가 작성되는 핵심 블록입니다. 모든 프로시저에는 반드시 BEGINEND가 있어야 합니다.
  • EXCEPTION: 선택 사항이지만, 실행부(BEGINEND)에서 오류가 발생했을 때 이를 처리하는 로직을 담는 부분입니다. 견고한 프로시저를 만들기 위해 필수적입니다.
  • / (슬래시): PL/SQL 블록의 끝을 알리고, 컴파일 및 생성을 실행하라는 명령어입니다.

## 프로시저 생성하기: “Hello, World!”

가장 간단한 예제로, 화면에 ‘Hello, World!’를 출력하는 프로시저를 만들어 보겠습니다.

  • 코드 작성: SQL Developer나 SQL*Plus에 아래 코드를 작성합니다.
CREATE OR REPLACE PROCEDURE PRC_HELLO_WORLD
IS
  -- 선언할 변수가 없으므로 선언부는 비워둡니다.
BEGIN
  -- DBMS_OUTPUT.PUT_LINE은 화면에 텍스트를 출력하는 기본 패키지입니다.
  DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/
  • 컴파일: 위 코드를 실행(F5 또는 Run)하면, Oracle은 문법을 검사하여 오류가 없으면 해당 프로시저를 컴파일하고 데이터베이스에 저장합니다. “Procedure PRC_HELLO_WORLD compiled” 와 같은 메시지가 나오면 성공입니다.

## 프로시저 실행하기 🚀

프로시저를 생성하는 것만으로는 아무 일도 일어나지 않습니다. 저장된 프로시저를 명시적으로 ‘호출(Call)’ 해야 BEGIN 블록의 코드가 실행됩니다.

1. 서버 출력 옵션 켜기 (최초 한 번만)

DBMS_OUTPUT 패키지의 결과를 화면에서 보려면, 세션에서 서버 출력 옵션을 활성화해야 합니다.

SQL

SET SERVEROUTPUT ON;

2. EXECUTE 명령어로 실행

EXECUTE 명령어(줄여서 EXEC)를 사용하여 프로시저를 호출합니다.

SQL

EXECUTE PRC_HELLO_WORLD;
  • 실행 결과:Hello, World! PL/SQL procedure successfully completed.

3. PL/SQL 블록 내에서 실행

다른 PL/SQL 블록(BEGINEND) 안에서는 프로시저 이름을 직접 호출하여 실행할 수 있습니다.

SQL

BEGIN
  PRC_HELLO_WORLD;
END;
/