TechY
SQL 프로그래밍 객체 : 함수, 저장 프로시저, 트리거 본문
1. 함수 (Function)
- 주요 목적: 값을 계산하고 반환
- 특징:
- 반드시 값을 반환해야 함
- SELECT 문 안에서 사용 가능
- 데이터 수정 불가 (읽기만 가능)
- 사용 시기 :
- 계산이 필요할 때
-
SELECT 문에서 값을 변환할 때
- 예: 환율 계산, 나이 계산
-- 나이 계산 함수 예시
CREATE FUNCTION fn_calculate_age(@birthDate DATE)
RETURNS int
AS
BEGIN
RETURN DATEDIFF(YEAR, @birthDate, GETDATE())
END
-- 사용 예시
SELECT dbo.fn_calculate_age('1990-01-01') as 나이
2. 저장 프로시저 (Stored Procedure)
- 주요 목적: 여러 작업을 수행하는 프로그램
- 특징:
- 값 반환이 선택적
- EXECUTE 또는 EXEC로 실행
- 데이터 수정 가능 (INSERT, UPDATE, DELETE)
- 사용 시기 :
- 여러 단계의 처리가 필요할 때
- 데이터 입력/수정/삭제가 필요할 때
- 예: 주문 처리, 회원 가입
-- 새 직원 등록 프로시저 예시
CREATE PROCEDURE sp_insert_employee
@name VARCHAR(50),
@salary INT
AS
BEGIN
INSERT INTO Employees (Name, Salary)
VALUES (@name, @salary)
END
-- 사용 예시
EXEC sp_insert_employee '홍길동', 50000000
3. 트리거 (Trigger)
- 주요 목적: 특정 이벤트 발생 시 자동으로 실행되는 코드
- 특징:
- 테이블의 변경(INSERT/UPDATE/DELETE)이 발생할 때 자동 실행
- 직접 호출 불가능
- 데이터 정합성 유지나 로그 기록에 주로 사용
- 사용 시기 :
- 데이터 변경을 감시해야 할 때
- 자동으로 추가 작업이 필요할 때
- 예 : 로그 기록, 데이터 동기화
-- 급여 변경 로그를 기록하는 트리거 예시
CREATE TRIGGER trg_salary_change
ON Employees
AFTER UPDATE
AS
BEGIN
IF UPDATE(Salary)
INSERT INTO SalaryChangeLog (EmployeeID, OldSalary, NewSalary, ChangeDate)
SELECT
i.ID,
d.Salary as OldSalary,
i.Salary as NewSalary,
GETDATE()
FROM inserted i
JOIN deleted d ON i.ID = d.ID
END
'[개발 정리] > [data engineering]' 카테고리의 다른 글
[MlOps] Data Engineering in Uber (2) (0) | 2021.09.11 |
---|---|
[MlOps] Data Engineering in Uber (1) (0) | 2021.09.11 |