본문 바로가기
Database

오라클 PL/SQL 블록 구조 이해하기

by 굿센스굿 2024. 12. 5.
반응형

 

오라클 데이터베이스에서 PL/SQL(Procedural Language/Structured Query Language)은 SQL의 확장 언어로, 절차적 프로그래밍 기능을 제공합니다. PL/SQL은 명령문과 논리를 포함한 블록 구조로 구성되어 있으며, 이를 통해 복잡한 데이터 조작과 비즈니스 로직을 처리할 수 있습니다.

이 글에서는 PL/SQL의 기본 블록 구조와 주요 구성 요소를 살펴보고, 세 가지 실전 예제를 통해 이해를 돕겠습니다.


1. PL/SQL 블록의 기본 구조

PL/SQL은 크게 세 부분으로 나뉘며, 다음과 같은 구조를 가집니다:

DECLARE
    -- 선언부: 변수, 상수, 커서 등을 선언
BEGIN
    -- 실행부: 실제로 실행되는 명령문
EXCEPTION
    -- 예외처리부: 오류 발생 시 처리
END;
  • DECLARE: 선택 사항입니다. 변수나 상수를 선언하는 부분입니다.
  • BEGIN: 필수 항목으로, 실행할 SQL 명령어와 프로그래밍 로직을 포함합니다.
  • EXCEPTION: 선택 사항입니다. 오류나 예외 상황을 처리하기 위해 사용합니다.
  • END: PL/SQL 블록의 종료를 나타냅니다.

2. 주요 구성 요소 설명

1) DECLARE: 선언부

선언부에서는 변수, 상수, 커서, 사용자 정의 데이터 타입 등을 선언합니다.
예:

DECLARE
    v_employee_name VARCHAR2(100); -- 변수 선언
    c_max_salary CONSTANT NUMBER := 5000; -- 상수 선언

2) BEGIN: 실행부

실행부는 주로 SQL 명령문, 제어 구조(IF, LOOP 등), 함수 호출 등을 포함합니다.
예:

BEGIN
    SELECT first_name INTO v_employee_name FROM employees WHERE employee_id = 101;
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
END;

3) EXCEPTION: 예외 처리부

오류 발생 시 이를 처리하는 로직을 작성합니다.
예:

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('No data found for the given employee ID.');

3. PL/SQL 블록 예제

예제 1: 간단한 출력

다음은 PL/SQL 블록을 사용해 문자열을 출력하는 간단한 예제입니다.

DECLARE
    v_message VARCHAR2(50) := 'Hello, PL/SQL!';
BEGIN
    DBMS_OUTPUT.PUT_LINE(v_message);
END;
  • 설명: v_message라는 변수를 선언하고, DBMS_OUTPUT.PUT_LINE으로 값을 출력합니다.

예제 2: SELECT INTO 문을 사용한 데이터 조회

다음은 특정 직원의 이름을 조회하여 출력하는 예제입니다.

DECLARE
    v_employee_name VARCHAR2(100);
BEGIN
    SELECT first_name INTO v_employee_name FROM employees WHERE employee_id = 101;
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('No employee found with the given ID.');
END;
  • 설명: SELECT INTO 문을 사용해 변수에 데이터를 저장하며, 데이터가 없을 경우 NO_DATA_FOUND 예외를 처리합니다.

예제 3: FOR LOOP와 EXCEPTION을 사용한 반복 처리

다음은 직원 테이블에서 부서별로 급여를 계산하는 예제입니다.

DECLARE
    v_total_salary NUMBER;
BEGIN
    FOR v_rec IN (SELECT department_id FROM departments) LOOP
        BEGIN
            SELECT SUM(salary) INTO v_total_salary
            FROM employees
            WHERE department_id = v_rec.department_id;

            DBMS_OUTPUT.PUT_LINE('Department ' || v_rec.department_id || ': ' || v_total_salary);
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                DBMS_OUTPUT.PUT_LINE('No employees in department ' || v_rec.department_id);
        END;
    END LOOP;
END;
  • 설명: 부서별로 반복하여 급여 합계를 계산하며, 데이터가 없는 경우 예외를 처리합니다.

4. PL/SQL 블록 사용 시 유의사항

  1. 컴파일 및 실행 환경
    PL/SQL 블록은 Oracle SQL*Plus, SQL Developer, 또는 다른 Oracle 도구에서 실행 가능합니다. DBMS_OUTPUT.PUT_LINE 사용 시 출력 활성화가 필요합니다:
  2. SET SERVEROUTPUT ON;
  3. 변수 범위와 데이터 타입
    선언부에서 정의된 변수는 해당 블록 내에서만 유효합니다. SQL 명령어와 호환되는 데이터 타입을 사용해야 합니다.
  4. 예외 처리의 중요성
    예상치 못한 오류로 인해 프로그램이 종료되지 않도록 예외 처리를 철저히 설계합니다.

5. 결론

PL/SQL 블록 구조는 선언부, 실행부, 예외 처리부로 구성되어 있으며, 데이터 조작과 비즈니스 로직을 처리하기 위한 강력한 도구입니다. 본문에서 제공된 예제들은 실무에서 자주 사용하는 패턴을 다루었으며, 이를 바탕으로 더 복잡한 로직을 설계할 수 있습니다.

PL/SQL의 유연성과 강력함을 활용하여 데이터베이스 애플리케이션 개발에서 효율성을 극대화해 보세요!

반응형