[Snowflake] Stored Procedures & UDFs

차지예·2026년 5월 7일

Snowflake

목록 보기
9/49
post-thumbnail

Stored Procedures 기본 개념

정의

구분내용
RDBMS 정의SQL 문장들의 명명된 집합(named collections)
특징절차적 로직(procedural logic) 포함 가능
Snowflake분기(branching), 반복(looping) 등 프로그래밍 구조 사용 가능

역할 분리

역할담당
DBA (Database Admin)프로시저 생성 CREATE PROCEDURE
DE (Data Engineer)프로시저 실행 EXECUTE / CALL

주요 활용 목적

#목적
1여러 DB 작업이 필요한 태스크 자동화
2데이터베이스 작업 동적 생성 및 실행
3소유자(Owner) 권한으로 코드 실행 → 권한 위임 가능

예제 코드 (슬라이드 — MS SQL Server 기준)

CREATE PROCEDURE CLEAR_EMP_TABLES
AS
BEGIN
    DELETE FROM EMP01 WHERE EMP_DATE < DATEADD(MONTH, -1, GET_DATE())
    DELETE FROM EMP02 WHERE EMP_DATE < DATEADD(MONTH, -1, GET_DATE())
    DELETE FROM EMP03 WHERE EMP_DATE < DATEADD(MONTH, -1, GET_DATE())
    DELETE FROM EMP04 WHERE EMP_DATE < DATEADD(MONTH, -1, GET_DATE())
    DELETE FROM EMP05 WHERE EMP_DATE < DATEADD(MONTH, -1, GET_DATE())
END
-- 실행
EXECUTE CLEAR_EMP_TABLES;

JavaScript Stored Procedure (Snowflake)

지원 언어 5가지

언어SPUDF
Java
JavaScript
Python
Scala
Snowflake Scripting / SQL

핵심 구문 정리

구문설명
RETURNS필수(mandatory) — 반환값 없어도 반드시 명시, 없으면 NULL 반환
LANGUAGE사용할 언어 지정 (예: JAVASCRIPT)
EXECUTE AS OWNER소유자(Owner) 권한으로 실행
EXECUTE AS CALLER호출자(Caller) 권한으로 실행
$$프로시저 본문의 시작/끝 구분자
snowflake.execute()JavaScript API — DB 작업 실행 메서드

예제 코드 (슬라이드 기준)

CREATE PROCEDURE EXAMPLE_STORED_PROCEDURE(PARAM1 STRING)
    RETURNS STRING
    LANGUAGE JAVASCRIPT
    EXECUTE AS OWNER
AS
$$
    var param1 = PARAM1;
    var sql_command = "SELECT * FROM " + param1;
    snowflake.execute({sqlText: sql_command});
    return "Succeeded.";
$$;
-- 호출
CALL EXAMPLE_STORED_PROCEDURE('EMP01');

⚠️ CALL 키워드로 호출 — SQL 표현식 안에서 직접 호출 불가


Stored Procedures vs UDFs 비교

핵심 목적 차이

구분목적
UDF값을 계산하고 반환 (calculate & return a value)
Stored Procedure액션 수행 (perform actions — DDL, DML 등)

기능 비교표

FeatureUDFSP
SQL 문 안에서 호출
오버로드(Overload) 가능
0개 이상 입력 파라미터
JavaScript API 사용
반환값 선택적(optional)❌ 항상 필수✅ 선택 가능
반환값을 SQL에서 직접 사용
재귀 호출 가능✅ (최대 16depth)

각 항목 근거 요약

Feature근거
SQL 호출SP는 CALL로만 실행, SELECT sp() 형태 불가
오버로드파라미터 수 또는 타입이 다르면 동일 이름 사용 가능
JavaScript APISP만 snowflake.execute() 사용 가능
반환값UDF는 항상 return 필수 / SP는 없으면 NULL 반환
재귀 호출SP 내부에서 자기 자신 호출 가능, 최대 스택 16

최종 체크리스트

□ SP 지원 언어 5개 → Java / JavaScript / Python / Scala / Snowflake Scripting
□ RETURNS 절 → 필수(mandatory), 값 없으면 NULL 반환
□ $$ → 본문 시작/끝 구분자
□ EXECUTE AS → OWNER(소유자) / CALLER(호출자) / RESTRICTED CALLER
□ SP 호출 → CALL 키워드, SQL 표현식 안 사용 불가
□ UDF 호출 → SQL 문 안에서 바로 사용 가능
□ JavaScript API → SP만 사용 가능 (UDF 불가)
□ 재귀 호출 → SP만 가능, 최대 depth 16
□ UDF 목적 → 값 계산 후 반환
□ SP 목적 → 액션 수행 (DDL, DML 등)

0개의 댓글