---
title: 매크로와 함수
description: 범위가 제한된 정적 이름 확인으로 타입 없는 SQL 매크로와 타입이 지정된 typesql 함수를 정의합니다.
species: reference
---
# 매크로와 함수

타입 없는 SQL 도우미에는 `create macro`를 사용합니다. 호출자에게 검증된 매개변수와 반환 타입이 필요하면 `create function`을 사용합니다.

```typesql
create function cents_to_dollars(cents: integer!) returns decimal(18, 2) as
  cast(cents as decimal(18, 2)) / 100.0;

select cents_to_dollars(amount)
from titan.stripe.charges
```

## SQL 매크로

`create macro name(parameters) as expression`은 쿼리 방언을 따릅니다. 매개변수에는 기본값을 지정할 수 있습니다. 테이블 매크로는 `as table` 뒤에 쿼리를 씁니다. 검사기는 이를 타입 없는 함수로 취급합니다.

## 타입이 지정된 함수

타입이 지정된 함수는 각 매개변수와 스칼라 또는 테이블 반환값 1개를 선언합니다. 본문은 절차적 SQL 문이 아니라 표현식이나 쿼리입니다. 이름 확인은 정적이며 재귀는 `TS0406`을 반환합니다.

검사기는 본문이 선언된 반환 타입에 맞는지 검증합니다. 컴파일된 런타임 SQL 문에는 지원되는 SQL만 남고 어노테이션 구문은 없습니다.

## 이름 확인 순서

로컬 선언과 가져온 패키지 내보내기는 하나의 닫힌 환경을 구성합니다. 중복 내보내기는 순서에 따라 덮어쓰는 대신 오류가 됩니다. 함수 호출은 인수 개수(`TS0404`)와 인수 타입(`TS0405`)를 검사합니다.

함수를 여러 파일에서 공유하려면 패키지를 사용하세요. 의미가 한 모델에 속하며 그 모델과 함께 검토해야 한다면 로컬 선언으로 유지하세요.
