DataBase/Oracle

실무에서 자주 쓰이는 Oracle 주요 기능 정리 (트리거, 프로시저, 패키지, 통계)

범데이 2025. 8. 1. 12:25

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
반응형