---
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 つ宣言します。本体は式またはクエリで、手続き的な文ではありません。解決は静的に行い、再帰には `TS0406` を返します。

検証器は本体を宣言した戻り値に照らして検証します。コンパイル後の実行文には、対応する SQL だけが含まれ、注釈構文は残りません。

## 解決順序

ローカル宣言とインポートしたパッケージのエクスポートは、1 つの確定した環境を構成します。重複するエクスポートは順序に依存して上書きせず、エラーにします。関数呼び出しでは引数の数（`TS0404`）と型（`TS0405`）を検証します。

ファイルをまたいで関数を共有するにはパッケージを使います。1 つのモデルだけに意味があり、そのモデルと一緒にレビューすべき場合は、ローカル宣言にしてください。
