DB

[DB] 프로시저, 트리거, 사용자 정의 함수

연듀 2024. 1. 31. 22:05

 

프로시저

 

일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다.

특정 기능을 수행하는 일종의 트랜젝션 언어로, 호출을 통해 실행되어 미리 저장해 놓은 SQL작업을 수행한다.

 

 

프로시저 구성

 

DECLARE : 프로시저의 명칭, 변수, 인수, 데이터 타입을 정 의하는 선언부 (필수)

BEGIN / END : 프로시저의 시작과 종료를 의미 (필수)

CONTROL : 조건문 또는 반복문이 삽입, 순차적 처리

SQL : DML, DCL이 삽입돼, 조회, 추가, 수정, 삭제 작업을 수행

EXCEPTION : 구문 실행 중 예외 발생 시 처리 방법 정의

TRANSACTION : 작업들을 DB에 적용할지 취소할지 결정 하는 처리부

 

 

 

프로시저 생성

CREATE PROCEDURE 프로시저명(파라미터) 
BEGIN
	프로시저 BODY;
END;

 

 

 

 

트리거

 

데이터의 변경(INSERT, DELETE, UPDATE)문이 실행될 때 자동으로 실행되는 프로시저

 

 

트리거는 크게 행 트리거와 문장 트리거가 존재한다.

 

  • 행 트리거 : 테이블 안의 영향을 받은 행 각각에 대해 실행된다. 변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있다.
  • 문장 트리거 : INSERT, UPDATE, DELETE 문에 대해 한 번만 실행된다.

 

또한 트리거는 다음과 같은 속성을 갖는다.

  • BEFORE 또는 AFTER  : 트리거가 실행되는 시기를 지정한다.
  • INSTEAD OF : 트리거를 원래 문장 대신 수행한다.
  • WHEN : 트리거를 시작하는 조건식을 지정한다.

 

 

일반적으로 트리거는 다음의 3 가지 경우에 시작된다. 트리거는 SELECT 문에 의한 데이터 검색에 영향을 미칠 수 없다.

  • INSERT (새로운 행 삽입)
  • UPDATE (기존 행의 변경) / UPDATE OF (기존 행의 특정 열 변경)
  • DELETE (기존 행 삭제)

 

-- 트리거 생성
CREATE TRIGGER trg_AfterInsert
ON TableName -- 트리거가 적용될 테이블
AFTER INSERT
AS
BEGIN
    -- 삽입된 데이터를 가져와서 다른 테이블에 추가
    INSERT INTO AnotherTable (Column1, Column2, Column3)
    SELECT Column1, Column2, Column3
    FROM inserted;
END;

 

 

사용자 정의 함수

 

특정한 계산이나 로직을 수행하고 그 결과로 단일 값을 반환하는 저장 프로시저와 비슷한 개념

단일값(single value)를 return

 

이 함수는 일반적으로 공통 수식이나 연산을 캡슐화하고, SQL 쿼리에서 사용되거나 다른 저장 프로시저에서 호출될 수 있다. 

 

 

-- 사용자 정의 함수 정의
CREATE FUNCTION GetEmployeeName(@employeeID INT)
RETURNS NVARCHAR(100)
AS
BEGIN
    DECLARE @name NVARCHAR(100);
    SELECT @name = FirstName + ' ' + LastName
    FROM Employees
    WHERE EmployeeID = @employeeID;
    RETURN @name;
END;

-- 함수 사용
SELECT EmployeeID, dbo.GetEmployeeName(EmployeeID) AS EmployeeName
FROM EmployeeTable;

 

 

 

 

 

https://code-lab1.tistory.com/262 

https://hijjang2.tistory.com/392