프로시저
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다.
특정 기능을 수행하는 일종의 트랜젝션 언어로, 호출을 통해 실행되어 미리 저장해 놓은 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;
'DB' 카테고리의 다른 글
[MySQL] 재귀 쿼리 (RECURSIVE CTE) (0) | 2024.12.17 |
---|---|
[MySQL] 프로시저, 이벤트 스케줄러 만들기 (1) | 2024.06.01 |
[DB] 데이터베이스 키(Key)의 개념 / 종류 (0) | 2024.01.31 |
[DB] 데이터베이스 용어 정리 (0) | 2024.01.31 |
[MySQL] CMD이용해 CRUD 하기 (0) | 2023.05.04 |