Oracle 12c 데이터베이스 17 - 저장 프로시저, 트리거(Trigger)

💡 본 글은 ‘실습과 함께하는! 데이터베이스 Oracle 12c’ 강의 내용을 바탕으로 정리하였습니다.

저장 프로시저(Stored Procedure)

개념

  • SQL을 함수 형태로 저장하고 사용하는 방법(Static SQL)
  • 컴파일러가 프리컴파일해두고 수행, 성능 상 이점이 있음

📌 일반적인 SQL은 Dynamic SQL로, 인터프리터 방식으로 작동(엔터를 치면 그때마다 번역을 해서 동작)

문법

저장 프로시저 정의

  CREATE OR REPLACE PROCEDURE 프로시저명(인자 인자형, ...)
  BEGIN
    sql 문장...
  END

저장 프로시저 호출

  EXECUTE 프로시저명;

저장 프로시저 삭제

  DROP PROCEDURE 프로시저명;

PL/SQL

개념

  • 오라클에서 저장 프로시저에 쓸 수 있는 코드에 붙인 이름(Oracle’s Procedural Language Extension to SQL)
    • 보통 절차적 언어(Procedural language)라고 하면 객체 지향 이전의 C나 PASCAL 같은 언어
    • SQL 자체는 비절차적 특성을 갖고 있는데, 절차적 언어가 갖는 기능을 추가로 지원하는 게 PL/SQL
  • 변수 정의(DECLARE), 조건문, 반복문 등 지원
  • 블럭구조, 자체 컴파일 기능

유형

Anonymous

  DECLARE
  BEGIN
  EXCEPTION
  END

프로시저

  • 리턴 값이 없는 경우
  • 서브루틴이라고 부르기도 함
  PROCEDURE 프로시저명 IS
  BEGIN
  EXCEPTION
  END

함수

  • 리턴 값이 있는 경우
  • VAR 변수명 변수형으로 변수 선언해서 함수 리턴 값 저장 가능
  FUNCTION 함수명 RETURN 데이터타입 IS
  BEGIN
     return value;
   EXCEPTION
   END

트리거

개념

  • 저장 프로시저 중 하나
  • 별도로 호출해야 하는 저장 프로시저와 달리, 특정한 조건이 되면 자동으로 호출(콜백: Callback)
    • ex. 레코드가 삭제되면 자동으로 참조무결성을 체크하는 트리거

문법

트리거 정의

  CREATE TRIGGER 트리거명 BEFORE(또는 AFTER) CRUD ON 테이블명
    (FOR EACH ROW)
  BEGIN
    변경 (OLD.칼럼명) 또는 변경 (NEW.컬럼명) 이용한 처리
  END

💡 만약 이 내부에 DBMS_OUTPUT.PUT_LINE()를 사용하여 로그를 찍어 주려면? 트리거 호출되기 전에 SET SERVEROUTPUT ON 명령어를 실행해야 함!

트리거 삭제

  DROP TRIGGER 프로시저명;