[Oracle] PL/SQL 블록의 구조 (Subprogram part)

PL/SQL 블록의 구조

PL/SQL 구조

PL/SQL 블록의 구조는 다음과 같습니다.

  • 실행부 : BEGIN 으로 시작하여 END 로 끝나는 부분입니다. 필수구조입니다. 
  • 선언부 : 객체를 정의합니다. 선택구조입니다.
  • 예외처리부 : 발생한 예외를 처리합니다. 선택구조입니다.

예시 자료는 일부러 예외가 발생하도록 해보았습니다.

  • OUTPUT1 : 1989년 12월 24일 전일을 정상적으로 표시합니다.
                   선언부에서 정의한 L_V_BIRTH 변수가 '19891224' 값을 가지고 있음을
                   확인할 수 있습니다.
  • OUTPUT2 : L_V_DAYBEFBIRTH 를 다시 출력해 봅니다.
  • OUTPUT3 : 출력하기 전에 1989년 02월 30일을 구하도록 시도하였으나 
                   해당 일자는 존재하지 않기에 ORA-01861 예외가 발생하게 됩니다. 
                   그리하여 OUTPUT3 부분은 실행이 불가합니다.
SET SERVEROUTPUT ON
-- 선언부 시작 Declarative part begins
DECLARE
    L_V_BIRTH VARCHAR2(8) := '19891224';
    L_V_DAYBEFBIRTH VARCHAR2(8);

-- 실행부 시작 Executable part begins
BEGIN

  L_V_DAYBEFBIRTH := TO_CHAR(TO_DATE(L_V_BIRTH) - 1, 'YYYYMMDD');
 
  DBMS_OUTPUT.PUT_LINE ('OUTPUT1: ' || L_V_DAYBEFBIRTH);

  L_V_BIRTH := '19890231';
--  L_V_DAYBEFBIRTH := TO_CHAR(TO_DATE(L_V_BIRTH) - 1, 'YYYYMMDD');
  DBMS_OUTPUT.PUT_LINE ('OUTPUT2: ' || L_V_DAYBEFBIRTH);
  
  L_V_DAYBEFBIRTH := TO_CHAR(TO_DATE(L_V_BIRTH) - 1, 'YYYYMMDD');
  DBMS_OUTPUT.PUT_LINE ('OUTPUT3: ' || L_V_DAYBEFBIRTH);

-- 예외처리부 시작 Exception-handling part begins
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('EXCEPTION OTHERS: ' || SQLERRM);
END;
/

PL/SQL 선언부

선언부에 대한 예제 자료입니다. 오라클 데이터베이스에서 사용하는 데이터타입뿐만 아니라 PL/SQL은 펑션, 프로시저, 로우타입, 커서 등 매우 다양한 객체를 선언할 수 있습니다. 다음은 프로시저를 선언부에서 설정해보겠습니다. 익명 프로시저라고도 합니다.

SET SERVEROUTPUT ON

DECLARE
   NUM   NUMBER;

   PROCEDURE PROCEDURE_NAME (P_PARAM1 IN VARCHAR2, P_PARAM2 IN VARCHAR2)
   IS
   BEGIN
      DBMS_OUTPUT.PUT_LINE (
         'param1 is ' || P_PARAM1 || ' and param2 is ' || P_PARAM2);
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.PUT_LINE (SQLERRM);
   END;
BEGIN
   PROCEDURE_NAME ('1', '2');
END;
/
--param1 is 1 and param2 is 2

--PL/SQL procedure successfully completed.
  • SET SERVEROUTPUT ON: 이 문장은 SQL*Plus 환경에서 출력을 활성화합니다.
  • DECLARE: 변수와 프로시저를 선언하는 섹션의 시작을 나타냅니다.
  • PROCEDURE PROCEDURE_NAME: 여기서 PROCEDURE_NAME이라는 프로시저가 선언되었으며, P_PARAM1과 P_PARAM2 두 매개변수를 사용합니다.
  • BEGIN: 블록의 실행 섹션의 시작을 나타냅니다.
  • DBMS_OUTPUT.PUT_LINE: 이는 정보를 출력하는 데 사용되는 내장 패키지로, 여기서는 P_PARAM1 및 P_PARAM2의 값을 표시합니다.
  • EXCEPTION: 블록 실행 중에 발생할 수 있는 예외를 처리합니다. 이 예제에서는 예외가 발생하면 DBMS_OUTPUT.PUT_LINE을 사용하여 오류 메시지를 출력합니다.
  • BEGIN: 익명 블록의 실행 시작을 나타냅니다.
  • PROCEDURE_NAME ('1'): '1'을 P_PARAM1로 사용하여 익명 프로시저를 호출합니다.
  • END: 블록의 끝을 나타냅니다.
  • /: 익명 블록을 실행합니다.

댓글