

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# PREPARE
<a name="r_PREPARE"></a>

実行用のステートメントを準備します。

PREPARE によって、準備済みステートメントが作成されます。PREPARE ステートメントを実行すると、指定されたステートメント (SELECT、INSERT、UPDATE、または DELETE) が解析、再出力、および計画されます。準備済みステートメントに対して EXECUTE コマンドを発行すると、Amazon Redshift は (指定したパラメータ値に基づいてパフォーマンスを改善するように) 必要に応じてクエリ実行計画を修正してから、その準備済みステートメントを実行することがあります。

## 構文
<a name="r_PREPARE-synopsis"></a>

```
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
```

## パラメータ
<a name="r_PREPARE-parameters"></a>

 *plan\$1name*   
この特定の準備済みステートメントに付けられた任意の名前。この名前は単一セッション内で一意でなければならず、以降は事前に準備済みのステートメントの実行、またはその割当解除に使われます。

 *datatype*   
準備済みステートメントに対するパラメータのデータ型。準備済みステートメント自体のパラメータを参照するには、\$11、\$12 など (最大 \$132767) を使用します。

 * ステートメント*   
SELECT、INSERT、UPDATE または DELETE の任意のステートメント。

## 使用に関する注意事項
<a name="r_PREPARE_usage_notes"></a>

準備済みステートメントでは、パラメータ (ステートメントの実行時にステートメントに代入される値) を使用できます。準備済みステートメントにパラメータを含めるには、PREPARE ステートメントにデータ型のリストを提供し、準備するステートメント自体で、\$11、\$12 などの表記を使って位置によりパラメータを参照します。パラメータの最大数は 32767 です。このステートメントを実行する際に、EXECUTE ステートメントでこれらのパラメータの実際の値を指定します。詳細については、「[EXECUTE](r_EXECUTE.md)」を参照してください。

準備済みステートメントは、現在のセッションの有効期間中のみ有効です。セッションが終了すると、準備済みステートメントは破棄されるため、再使用する場合は、作り直す必要があります。これは、単一の準備済みステートメントを複数の同時データベースクライアントで使用することはできないことも意味します。ただし、各クライアントは独自の準備済みステートメントを作成して使用することができます。準備済みステートメントは、DEALLOCATE コマンドを使って、手動で削除できます。

単一のセッションを使用して多数の類似したステートメントを実行する場合に、準備済みステートメントは、パフォーマンス面での最大のメリットをもたらします。前述したように、準備済みステートメントを新たに実行するたびに、Amazon Redshift は指定されたパラメータ値に基づいてパフォーマンスを向上させるため、クエリの実行計画を修正することがあります。Amazon Redshift が特定の EXECUTE ステートメントに選択したクエリ実行計画を確認するには、[EXPLAIN](r_EXPLAIN.md) コマンドを使用します。

クエリの計画と、クエリの最適化のために Amazon Redshift が収集した統計情報の詳細については、「[ANALYZE](r_ANALYZE.md) コマンド」を参照してください。

## 例
<a name="sub-examples-prepare"></a>

一時テーブルを作成し、INSERT ステートメントを準備した上でそれを実行します。

```
DROP TABLE IF EXISTS prep1;
CREATE TABLE prep1 (c1 int, c2 char(20));
PREPARE prep_insert_plan (int, char)
AS insert into prep1 values ($1, $2);
EXECUTE prep_insert_plan (1, 'one');
EXECUTE prep_insert_plan (2, 'two');
EXECUTE prep_insert_plan (3, 'three');
DEALLOCATE prep_insert_plan;
```

SELECT ステートメントを準備して実行します。

```
PREPARE prep_select_plan (int)
AS select * from prep1 where c1 = $1;
EXECUTE prep_select_plan (2);
EXECUTE prep_select_plan (3);
DEALLOCATE prep_select_plan;
```

## 以下の資料も参照してください。
<a name="r_PREPARE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [EXECUTE](r_EXECUTE.md) 