프로시저는 정해진 문법 구조에 따라 작성해야 하며, 생성(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;: 실제 실행될 코드가 작성되는 핵심 블록입니다. 모든 프로시저에는 반드시BEGIN과END가 있어야 합니다.EXCEPTION: 선택 사항이지만, 실행부(BEGIN…END)에서 오류가 발생했을 때 이를 처리하는 로직을 담는 부분입니다. 견고한 프로시저를 만들기 위해 필수적입니다./(슬래시): 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 블록(BEGIN…END) 안에서는 프로시저 이름을 직접 호출하여 실행할 수 있습니다.
SQL
BEGIN PRC_HELLO_WORLD; END; /