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
'자격증 > sqld' 카테고리의 다른 글
[sqld 2장] SQL 저장 모듈(Stored Module) 개념 및 종류 (0) | 2025.03.05 |
---|---|
[sqld 2장] 프로시저 트리거 특징 차이 (0) | 2025.03.05 |
[sqld 2장]PL/SQL 구문에서의 DML, DCL, DDL 사용법 (0) | 2025.03.05 |
maria db 테이블에 데이터 넣기 (0) | 2025.02.20 |
maria db 테이블 생성하기 (0) | 2025.02.20 |