PL/SQL - 트리거: 데이터베이스 자동화의 친절한 가이드

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 PL/SQL 트리거의 마법의 세상으로 뛰어들어 보겠습니다. 프로그래밍에 새로운 분이신가요? 걱정 마세요 - 이 모험에서 당신의 신뢰할 수 있는 안내자가 되겠습니다. 이 튜토리얼의 끝을 맞이할 때쯤에는 프로처럼 트리거를 만들 수 있을 것입니다!

PL/SQL - Triggers

트리거는 무엇인가요?

이미지를 상상해 보세요. 당신이 도서관 사서라면 어떨까요? 매번 책이 빌려갈 때마다 로그를 업데이트하고, 연체되었는지 확인하고, 빌리는 사람에게 알림을 보내야 합니다. 모든 책에 대해 이를 수동으로 수행하는 것은 지치겠죠! 여기서 트리거가 등장합니다.

데이터베이스 세상에서, 트리거는 특정 이벤트가 발생할 때 자동으로 동작하는 유용한 작은 엘프와 같습니다. 이들은 특정 데이터베이스 연산에 대한 반응으로 작동하는 코드 조각입니다.

트리거 만들기: 손을 더러 만들어 보자!

이제 우리의 첫 번째 트리거를 만들어 보겠습니다. 가장 간단한 것부터 시작해 복잡한 것으로 점진적으로 올라갈 테니까요.

기본 트리거 구조

트리거의 일반적인 구조는 다음과 같습니다:

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[WHEN condition]
DECLARE
-- 변수 선언
BEGIN
-- 트리거 본문
EXCEPTION
-- 예외 처리
END;
/

이것이 두려워하지 마세요! 조금씩 설명해 보겠습니다.

예제 1: 간단한 "Hello, World!" 트리거

새로운 행이 테이블에 삽입될 때마다 "Hello, World!"를 출력하는 트리거를 만들어 보겠습니다:

CREATE OR REPLACE TRIGGER hello_world_trigger
AFTER INSERT ON employees
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World! 새로운 직원이 추가되었습니다!');
END;
/

여기서 무슨 일이 일어나고 있나요?

  • CREATE OR REPLACE TRIGGER: 데이터베이스에 새로운 트리거를 만들거나 기존 트리거를 대체한다는 것을 알립니다.
  • AFTER INSERT ON employees: 새로운 행이 'employees' 테이블에 삽입될 때 트리거가 발동합니다.
  • BEGIN...END: 트리거 로직을 넣는 곳입니다.
  • DBMS_OUTPUT.PUT_LINE: 텍스트를 출력하는 멋진 방법입니다.

예제 2: 변경 로그 기록

'employees' 테이블의 변경 사항을 로그로 기록하는 더 유용한 트리거를 만들어 보겠습니다:

CREATE OR REPLACE TRIGGER log_salary_changes
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_change_log (employee_id, old_salary, new_salary, change_date)
VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
END;
/

이 새로운 점은 무엇인가요?

  • AFTER UPDATE OF salary: 'salary' 열이 업데이트될 때만 트리거가 발동합니다.
  • FOR EACH ROW: 업데이트된 각 행에 대해 트리거가 발동합니다.
  • :OLD:NEW: 갱신된 행의 이전과 새로운 값을 가리킵니다.

트리거 발동: 마법을 일으키다

이제 트리거를 만들었으니, 어떻게 이를 발동시키는지 알아보겠습니다. 간단합니다! 트리거가 감시하는 데이터베이스 연산을 수행하면 됩니다.

예제 3: 트리거 발동

트리거를 작동시키는 것을 보겠습니다:

-- 이 명령어는 'hello_world_trigger'를 발동시킵니다.
INSERT INTO employees (employee_id, name, salary)
VALUES (1, 'John Doe', 50000);

-- 이 명령어는 'log_salary_changes' 트리거를 발동시킵니다.
UPDATE employees
SET salary = 55000
WHERE employee_id = 1;

이 명령어를 실행할 때, 배후에서 우리의 트리거가 활동합니다!

트리거 유형: 편리한 표

여기 다양한 유형의 트리거에 대한 빠른 참조 표가 있습니다:

트리거 유형 설명 예제 사용 사례
BEFORE 발동하는 작업 이전에 발동 입력 데이터를 검증하거나 수정하는 것
AFTER 발동하는 작업 이후에 발동 변경 사항을 로그로 기록하거나 관련 테이블을 업데이트
INSERT INSERT 연산에서 발동 자동으로 관련 기록을 생성
UPDATE UPDATE 연산에서 발동 데이터 변경을 시간별로 추적
DELETE DELETE 연산에서 발동 참조 일관성 유지
INSTEAD OF 뷰에 사용되어 사용자 정의 삽입, 업데이트, 삭제 연산 정의 복잡한 뷰 업데이트

결론: 트리거 학습자 되다!

축하합니다! PL/SQL 트리거의 세상으로 첫 걸음을 내디디셨습니다. 트리거 생성의 기본, 트리거 작동을 보고, 다양한 유형의 트리거를 살펴보았습니다.

트리거는 강력한 도구지만, 큰 힘에는 큰 책임이 따릅니다. 지혜롭게 사용하면 데이터베이스가 더 쉽게 작동하게 만들 수 있습니다.

계속 연습하고, 호기심을 가지고 있으면, 곧 트리거 마에スト로가 될 것입니다! 행복한 코딩, 미래의 데이터베이스 마법사 여러분!

Credits: Image by storyset