PL SQL
2025. 3. 14. 13:35ㆍPL 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 장점
- 통합성
- PL/SQL은 Oracle DB와 통합되어있어, 데이터베이스 객체와 함께 실행되고 관리됨.
- 성능 최적화
- DB에 접근을 최적화해 성능 향상. DB서버에서 실행되므로, 네트워크 부하를 줄이고 처리 속도를 향상 시킴. 또한 반복 작업을 효율적으로 처리하기 위한 커서 개념을 제공하여 성능 향상.
- 구조화된 프로그래밍
- 프로시저, 함수, 트리거 등을 정의하고 사용할 수 있는 구조화된 프로그래밍 언어. 이를 통해 재사용성 높이고 유지보수 용이하게 함.
모듈화된 코드 작성을 통해 가독성&유지보수성 향상.
- 프로시저, 함수, 트리거 등을 정의하고 사용할 수 있는 구조화된 프로그래밍 언어. 이를 통해 재사용성 높이고 유지보수 용이하게 함.
- 강력한 기능
- 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 |