TechY

SQL 프로그래밍 객체 : 함수, 저장 프로시저, 트리거 본문

[개발 정리]/[data engineering]

SQL 프로그래밍 객체 : 함수, 저장 프로시저, 트리거

hskimim 2024. 12. 18. 14:10

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