Oracle 데이터베이스는 단순한 CRUD뿐 아니라 다양한 고급 기능을 통해 복잡한 비즈니스 로직을 효율적으로 처리할 수 있도록 지원한다.
이번 글에서는 트리거, 저장 프로시저, 패키지, 통계 수집과 같은 Oracle의 핵심 기능들을 정리했다.
각각의 개념이 언제, 왜, 어떻게 쓰이는지를 쉽고 간단하게 정리했으니 참고하면 좋을 듯 하다.
1. 트리거(Trigger)
테이블에서 INSERT, UPDATE, DELETE 같은 이벤트가 발생했을 때 자동으로 실행되는 저장 코드이다.
활용 예시
- 주문 테이블에 INSERT 발생 시 재고 감소 자동 처리
- 로그인 로그 테이블에 INSERT가 발생하면 알림 기록 추가
CREATE OR REPLACE TRIGGER trg_update_stock
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE products SET stock = stock - :NEW.quantity
WHERE product_id = :NEW.product_id;
END;
실무 포인트
- BEFORE, AFTER, INSTEAD OF 로 시점 지정
- 무분별하게 쓰면 성능 저하 가능 → 꼭 필요한 곳에만 사용!
2. 저장 프로시저(Procedure)
여러 SQL 문을 절차적으로 묶어 저장한 객체로, 호출만으로 반복 작업을 수행할 수 있다.
활용 예시
- 배치 처리 (매일 정산, 마감 처리)
- 사용자 등록 로직 묶기
CREATE OR REPLACE PROCEDURE register_user (
p_name IN VARCHAR2,
p_email IN VARCHAR2
)
IS
BEGIN
INSERT INTO users (name, email, created_at)
VALUES (p_name, p_email, SYSDATE);
END;
실무 팁
- 파라미터: IN(입력값 전달), OUT(결과값 반환), IN OUT(값을 전달하고 수정된 값을 다시 받음)
- 자주 반복되는 로직은 프로시저로 추출해서 관리 효율화
3. 패키지(Package)
관련 있는 프로시저, 함수, 변수, 상수 등을 묶어 모듈화한 객체이다.
왜 패키지를 쓸까?
- 코드 분리와 재사용성 ↑
- 접근 제어 가능 (Private, Public 요소)
CREATE PACKAGE emp_pkg AS
PROCEDURE hire_emp(p_name VARCHAR2);
FUNCTION get_total_salary RETURN NUMBER;
END emp_pkg;
CREATE PACKAGE BODY emp_pkg AS
PROCEDURE hire_emp(p_name VARCHAR2) IS
BEGIN
INSERT INTO employees (name) VALUES (p_name);
END;
FUNCTION get_total_salary RETURN NUMBER IS
v_total NUMBER;
BEGIN
SELECT SUM(salary) INTO v_total FROM employees;
RETURN v_total;
END;
END emp_pkg;
4. 통계 수집 (Statistics)
옵티마이저가 쿼리 실행 계획을 수립할 때 참고하는 데이터 분포 정보이다.
실무 예시
- 옵티마이저가 인덱스를 사용할지 말지 결정할 때 통계 정보를 참고함
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA', 'TABLE_NAME');
기억할 점
- 통계 수집이 오래된 경우 → 실행 계획이 비효율적일 수 있음
- 자동 수집 외에 대규모 변경 후 수동 수집 필요
728x90
반응형
'DataBase > Oracle' 카테고리의 다른 글
| "만화로 보는 오라클 튜닝" 을 통해 배운 Oracle SQL 튜닝 (1) | 2025.09.29 |
|---|