1. PL/SQL 이란?
- PL/SQL = Procedural Language / SQL
- 오라클에서 제공하는 절차적 프로그래밍 기능이 추가된 SQL 언어.
- 단순 SQL 문장만 실행하는 것이 아니라, 변수/조건문/반복문/예외처리 등을 이용해 프로그램처럼 로직을 작성 가능.
2. 블록 구조
PL/SQL은 기본적으로 블록 단위로 작성됨.
- 익명 블록: 이름 없이 실행만 되는 블록 (주로 테스트, 1회성 작업용)
- 이름 있는 블록 (저장형 프로그램): DB 객체로 저장되어 재사용 가능
- Procedure: 결과값 여러 개 가능, 반복 호출 작업에 적합
- Function: 반드시 단일 리턴 값 반환
- Package: 프로시저, 함수, 변수, 예외 등을 묶어 관리
- Trigger: 이벤트(INSERT/UPDATE/DELETE 등)에 의해 자동 실행되는 블록
3. 변수 선언
DECLARE
name VARCHAR2(20) := '이효리'; -- 선언 + 초기값
BEGIN
DBMS_OUTPUT.PUT_LINE('이름: ' || name);
END;
- CONSTANT → 상수 지정
- DEFAULT → 기본값 지정
- 블록의 DECLARE 구역에서만 선언 가능
4. DB 내에서 PL/SQL 사용 여부 확인
학습하며 정리한 방법:
- USER_OBJECTS, ALL_OBJECTS, DBA_OBJECTS 뷰를 조회하면 어떤 PL/SQL 오브젝트가 있는지 확인 가능.
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
WHERE OBJECT_TYPE IN ('PROCEDURE','FUNCTION','PACKAGE','TRIGGER');
- 패키지/프로시저/트리거가 많다 → PL/SQL을 실무에서 적극 사용 중이라는 의미.
5. 프로시저 (Procedure)
내가 이해한 핵심:
“DB 안에 저장된 프로그램 코드 블록”
→ SQL 여러 개를 묶어서 자동 실행 가능.
→ BEGIN ~ END 사이 로직을 저장해두고 CALL 하면 자동 실행.
예제 1) 단순 Update 처리
CREATE OR REPLACE PROCEDURE update_order_status (
p_order_id IN NUMBER,
p_new_status IN VARCHAR2
) AS
BEGIN
UPDATE orders
SET status = p_new_status,
updated_at = SYSDATE
WHERE order_id = p_order_id;
COMMIT;
END;
예제 2) 반복 Insert (배치 처리)
CREATE OR REPLACE PROCEDURE insert_dummy_users (p_count IN NUMBER) AS
BEGIN
FOR i IN 1..p_count LOOP
INSERT INTO users (user_id, user_name, created_at)
VALUES (user_seq.NEXTVAL, 'USER_' || i, SYSDATE);
END LOOP;
COMMIT;
END;
예제 3) 예외 처리 포함
CREATE OR REPLACE PROCEDURE safe_delete_order (p_order_id IN NUMBER) AS
BEGIN
DELETE FROM orders WHERE order_id = p_order_id;
COMMIT;
DBMS_OUTPUT.PUT_LINE('Order ' || p_order_id || ' deleted.');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;
6. 패키지 (Package)
실무에서 가장 많이 쓰이는 구조 → 여러 프로시저/함수를 묶어서 관리.
CREATE OR REPLACE PACKAGE order_pkg AS
PROCEDURE update_order_status(p_order_id IN NUMBER, p_new_status IN VARCHAR2);
PROCEDURE safe_delete_order(p_order_id IN NUMBER);
END order_pkg;
CREATE OR REPLACE PACKAGE BODY order_pkg AS
-- 프로시저 구현부 작성
END order_pkg;
내가 학습한 걸 현 회사 구조에 대입해보면:
- 패키지 + 프로시저 조합 → 비즈니스 로직이 DB 안에 들어가 있는 구조.
- 트리거 존재 여부 → 자동화 처리(감사 로그, 수정일 자동 업데이트 등) 많이 씀.
- 커서/루프 → 대량 배치 작업에서 자주 사용.
- 예외처리 (EXCEPTION) → 오류 발생 시 로그 남기거나 롤백 처리.
- PL/SQL은 오라클에서 절차적 로직을 구현하는 SQL 확장 언어
- 블록 구조와 변수 선언 방식 학습 완료
- 프로시저/함수/트리거/패키지 각각의 역할과 차이점 정리
- 예제 프로시저 작성 및 호출 방식 실습
- 실무에서는 “패키지 기반 구조 + 프로시저”가 주로 사용됨을 확인
- 따라서 프로시저 작성 → 패키지에 묶기 → 예외처리 포함하기가 핵심 패턴
'DB' 카테고리의 다른 글
| 오라클 DB 정리 – 정규화 · 참조 무결성 · 외래키 제약 · ENUM 대체 방법 (0) | 2025.06.11 |
|---|---|
| 오라클 책 정리 (0) | 2025.06.10 |
| Oracle과 MySQL 비교 DB 정리 (테이블 생성 ~ 조인, MyBatis) (0) | 2025.06.09 |
| Oracle SQL – 테이블 생성, 시퀀스, 제약조건 정리 (0) | 2025.06.05 |
| Oracle SQL 테이블 설계부터 집계함수까지 (0) | 2025.06.05 |