PL SQL

2025. 3. 14. 13:35PL SQL

SQL을 확장한 절차적 언어
오라클에서 지원한는 프로그래밍 언어의 특성을 수용해 SQL에서 사용할 수 없는 절차적 프로그래밍 기능을 가짐.

PL/SQL 종류 및 설명

오라클 PL/SQL(Procedural Language/SQL)은 SQL을 확장하여 절차적 프로그래밍이 가능하도록 만든 언어입니다.
PL/SQL은 Procedure(프로시저), Function(함수), Trigger(트리거) 등 여러 가지 실행 단위를 제공합니다.

PL/SQL 블록 구조와 변수

[[PL SQL 블록 구조]]
PL/SQL은 블록 구조다.

  • 블록
    • 선언
    • 실행
    • 예외처리
      변수는 데이터를 가공하고 처리하는데 사용, 다양한 타입 지원.

제어 구문, 반복문

[[제어 구문과 반복문]]
PL/SQL은 제어 구문과 반복문을 통해 프로그램 흐름을 제어할 수 있다.
IF, CASE, LOOP


PL/SQL 장점

  1. 통합성
    1. PL/SQL은 Oracle DB와 통합되어있어, 데이터베이스 객체와 함께 실행되고 관리됨.
  2. 성능 최적화
    1. DB에 접근을 최적화해 성능 향상. DB서버에서 실행되므로, 네트워크 부하를 줄이고 처리 속도를 향상 시킴. 또한 반복 작업을 효율적으로 처리하기 위한 커서 개념을 제공하여 성능 향상.
  3. 구조화된 프로그래밍
    1. 프로시저, 함수, 트리거 등을 정의하고 사용할 수 있는 구조화된 프로그래밍 언어. 이를 통해 재사용성 높이고 유지보수 용이하게 함.
      모듈화된 코드 작성을 통해 가독성&유지보수성 향상.
  4. 강력한 기능
    1. sql문을 실행하고, 변수 선언, 제어구문, 반복문을 활용해 프로그램의 흐름 제어. 예외 처리 기능을 제공하여 오류 상황에 대응 가능.

1. Procedure (프로시저)

  • 정의: SQL 문과 PL/SQL 로직을 하나의 단위로 묶어 저장한 실행 가능한 코드 블록
  • 특징:
    • 특정 작업을 수행하는 논리를 저장해두고 필요할 때 호출 가능
    • 파라미터를 받아 데이터를 처리할 수 있음 (IN, OUT, IN OUT)
    • 실행 후 반드시 값을 반환할 필요 없음 (함수와의 차이점)
    • 트랜잭션 처리 가능 (COMMIT, ROLLBACK 지원)

✅ 예제: 간단한 프로시저 생성

CREATE OR REPLACE PROCEDURE get_answer_count
IS
    v_count NUMBER;
BEGIN
    -- 테이블의 총 개수 조회
    SELECT COUNT(*) INTO v_count FROM app_bbs_answer;
    DBMS_OUTPUT.PUT_LINE('총 개수: ' || v_count);
END;
/

📌 실행 방법

EXEC get_answer_count;

2. Function (함수)

  • 정의: 특정 작업을 수행하고 반드시 값을 반환하는 PL/SQL 코드 블록
  • 특징:
    • 호출 시 반환 값이 필요 (SELECT 문에서 호출 가능)
    • 프로시저와 달리 반환값이 필수
    • 파라미터를 받을 수 있음
    • 주로 데이터 변환, 계산 로직, 특정 값 조회 등에 사용

✅ 예제: 총 데이터 개수를 반환하는 함수

CREATE OR REPLACE FUNCTION get_answer_total
RETURN NUMBER
IS
    v_total NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_total FROM app_bbs_answer;
    RETURN v_total;
END;
/

📌 실행 방법

SELECT get_answer_total() FROM dual;

3. Trigger (트리거)

  • 정의: 특정 이벤트(INSERT, UPDATE, DELETE) 발생 시 자동으로 실행되는 PL/SQL 코드 블록
  • 특징:
    • 테이블에 대한 변경 사항을 감지하여 자동 실행
    • 데이터 무결성 보장비즈니스 로직 자동 처리 가능
    • BEFORE, AFTER, INSTEAD OF 등의 트리거 유형 존재
    • 직접 호출할 수 없으며, 지정된 이벤트가 발생해야 실행됨

✅ 예제: INSERT 트리거 (새로운 데이터 추가 시 로그 기록)

CREATE OR REPLACE TRIGGER trg_answer_insert
AFTER INSERT ON app_bbs_answer
FOR EACH ROW
BEGIN
    INSERT INTO app_bbs_answer_log (answer_id, log_time)
    VALUES (:NEW.answer_id, SYSDATE);
END;
/
  • :NEW.answer_id → 새로 삽입된 데이터의 ID 값을 참조
  • 새로운 데이터가 app_bbs_answer 테이블에 삽입되면, 자동으로 app_bbs_answer_log 테이블에 로그 기록이 생성됨

'PL SQL' 카테고리의 다른 글

제어 구문과 반복문  (0) 2025.03.14
PL SQL 블록 구조  (0) 2025.03.14