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: 블록의 끝을 나타냅니다.
- /: 익명 블록을 실행합니다.