본문 바로가기
자격증/sqld

[sqld 2장]PL/SQL이란 PL/SQL 정의 사용하는 이유

by 딸기뚜왈기 2025. 3. 5.

PL/SQL 이란?

 

Procedural Language/Structured Query Language은 Oracle 데이터베이스에서 SQL을 확장한 절차적 프로그래밍 언어.
SQL은 단순히 데이터를 조작하는데 사용되지만, PL/SQL을 사용하면 논리적인 흐름을 제어하고, 복잡한 비즈니스 로직을 구현할 수 있음.

 


 

PL/SQL 사용 이유?

 

1️⃣ SQL만으로 해결할 수 없는 로직 구현 가능

  • SQL은 데이터를 조회, 삽입, 삭제하는 역할에 초점이 맞춰져 있지만,
    반복문, 조건문, 예외 처리 등의 기능이 없습니다.
  • PL/SQL을 사용하면 IF, LOOP, EXCEPTION HANDLING 등을 활용하여 프로그램적인 처리가 가능합니다.

🔹 예시 (IF 조건문 사용)

DECLARE
    v_salary NUMBER;
BEGIN
    SELECT salary INTO v_salary FROM employees WHERE emp_id = 1;

    IF v_salary < 5000 THEN
        DBMS_OUTPUT.PUT_LINE('급여가 낮습니다.');
    ELSE
        DBMS_OUTPUT.PUT_LINE('급여가 적정합니다.');
    END IF;
END;
/

2️⃣ 성능 최적화 (네트워크 부하 감소)

  • 일반적인 SQL을 사용할 경우, 애플리케이션이 데이터베이스와 여러 번 통신해야 하지만,
    PL/SQL 블록 내부에서 여러 개의 SQL 문을 실행하면 한 번의 요청으로 실행됩니다.
  • 네트워크 트래픽을 줄이고, 데이터베이스 부하를 감소시킬 수 있습니다.

🔹 예시 (여러 SQL을 한 번에 실행)

BEGIN
    UPDATE employees SET salary = salary + 500 WHERE emp_id = 1;
    INSERT INTO salary_log(emp_id, change_amount) VALUES (1, 500);
    COMMIT;
END;
/

3️⃣ 예외 처리 기능 제공

  • SQL에는 자체적인 예외 처리 기능이 없지만,
    PL/SQL에서는 **EXCEPTION HANDLING (예외 처리)**을 지원하여 에러 발생 시 대처 가능

🔹 예시 (예외 처리)

DECLARE
    v_salary NUMBER;
BEGIN
    SELECT salary INTO v_salary FROM employees WHERE emp_id = 100; -- 존재하지 않는 ID

    DBMS_OUTPUT.PUT_LINE('급여: ' || v_salary);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('해당 사원 ID가 없습니다.');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('예상치 못한 오류 발생!');
END;
/

➡ NO_DATA_FOUND 예외를 처리하여 오류로 인해 프로그램이 멈추는 것을 방지할 수 있습니다.


4️⃣ 저장 프로시저 & 함수 지원 (재사용성 증가)

  • **저장 프로시저(Stored Procedure)와 함수(Function)**를 만들어 두면,
    같은 로직을 여러 번 반복해서 사용 가능
  • 재사용성이 높아지고, 유지보수가 용이함

🔹 예시 (저장 프로시저 생성 및 실행)

CREATE OR REPLACE PROCEDURE update_salary (p_emp_id NUMBER, p_amount NUMBER) AS
BEGIN
    UPDATE employees SET salary = salary + p_amount WHERE emp_id = p_emp_id;
    COMMIT;
END;
/
-- 실행
BEGIN
    update_salary(1, 1000);
END;
/

➡ 한 번 정의하면 여러 번 호출 가능하여 코드 재사용성이 증가합니다.


5️⃣ 트리거(Trigger) 지원 (자동 실행 로직 구현)

  • 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 로직을 정의 가능
  • 감사 로그 기록, 데이터 무결성 유지 등의 역할 수행

🔹 예시 (급여 변경 시 로그 자동 기록)

CREATE OR REPLACE TRIGGER trg_salary_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO salary_log(emp_id, old_salary, new_salary)
    VALUES (:OLD.emp_id, :OLD.salary, :NEW.salary);
END;
/

➡ employees 테이블에서 급여가 변경되면, salary_log 테이블에 자동으로 변경 기록을 남김.

 

 

🔥 PL/SQL을 사용해야 하는 경우

 

사용 사례 SQL만으로 가능? PL/SQL이 필요한 이유
단순한 데이터 조회 ✅ 가능 PL/SQL 불필요
여러 개의 SQL을 한 번에 실행 ❌ 불가능 PL/SQL의 블록 구조 활용
조건문(IF), 반복문(LOOP) 필요 ❌ 불가능 PL/SQL에서 제어문 사용
예외 발생 시 처리 필요 ❌ 불가능 PL/SQL의 EXCEPTION 활용
동일한 SQL 로직을 여러 번 재사용 ❌ 불가능 PL/SQL 프로시저 & 함수 사용
데이터 변경 시 자동 실행 필요 ❌ 불가능 PL/SQL 트리거 사용

결론: PL/SQL은 언제 사용할까?

  • 단순 조회(SQL)는 SQL만 사용해도 충분
  • 반복문, 조건문, 예외 처리, 여러 SQL 실행이 필요하면 PL/SQL이 필수
  • 성능 최적화를 위해 PL/SQL로 네트워크 부하를 줄일 수 있음
  • 저장 프로시저 & 트리거를 활용하면 유지보수가 쉬워짐

즉, PL/SQL은 데이터베이스에서 비즈니스 로직을 구현하고, 성능을 최적화하는 데 필수적인 도구입니다! 😊

 

 


 

 

 

▽PL/SQL 구문에서의 DML, DCL, DDL 사용문법 규칙.▽

 

[sqld 2장]PL/SQL 구문에서의 DML, DCL, DDL 사용법

PL/SQL에서 DDL(Data Definition Language), DML(Data Manipulation Language), **DCL(Data Control Language)**의 사용 예시 유형주요 명령어사용 예시DDL (데이터 정의)CREATE, ALTER, DROPEXECUTE IMMEDIATE 'CREATE TABLE ...'DML (데이터 조

belle-sooir.tistory.com

 

프로시저 트리거 특징 차이

https://belle-sooir.tistory.com/190

 

[sqld 2장] 프로시저 트리거 특징 차이

프로시저 트리거 특징 차이프로시저트리거CREATE PROCEDURE 문법 사용CREATE TRIGGER 문법 사용COMMIT, ROLLBACK 실행 가능COMMIT, ROLLBACK 실행 불가능EXECURE 명령어로 실행생성 후 자동으로 실행

belle-sooir.tistory.com