

# パラメータ化されたクエリを使用する
<a name="querying-with-prepared-statements"></a>

Athena のパラメータ化されたクエリを使用して、実行時に同じクエリを異なるパラメータ値で再実行し、SQL インジェクション攻撃を防ぐことができます。Athena では、パラメータ化されたクエリは、任意の DML クエリまたは SQL プリペアドステートメントの実行パラメータの形式をとることができます。
+ 実行パラメータを持つクエリは 1 つのステップで実行でき、ワークグループ固有ではありません。パラメータ化する値の DML クエリには、疑問符を付けます。クエリを実行するときは、実行パラメータ値を順番に宣言します。パラメータの宣言とパラメータへの値の割り当ては、同じクエリで、しかし分離された方法で行えます。プリペアドステートメントとは異なり、実行パラメータを含むクエリを送信するときにワークグループを選択できます。
+ プリペアドステートメントには、`PREPARE` と `EXECUTE` の 2 つの別個の SQL ステートメントが必要です。まず、`PREPARE` ステートメントでパラメータを定義します。その後、定義したパラメータの値を指定する `EXECUTE` ステートメントを実行します。プリペアドステートメントはワークグループ固有です。それらが属するワークグループのコンテキスト外では実行できません。

## 考慮事項と制限事項
<a name="querying-with-prepared-statements-considerations-and-limitations"></a>
+ パラメータ化されたクエリは、Athena エンジンバージョン 2 以降でサポートされています。Athena エンジンバージョンの詳細については、「[Athena エンジンのバージョニング](engine-versions.md)」を参照してください。
+ 現在、パラメータ化されたクエリは、`SELECT`、`INSERT INTO`、`CTAS`および `UNLOAD` ステートメントでのみサポートされています。
+ パラメータ化されたクエリでは、パラメータは位置パラメータであり、`?` で示されます。パラメータには、クエリ内の順序によって値が割り当てられます。名前が挙げられているパラメータはサポートされていません。
+ 現在、`?` パラメータは `WHERE` 句にのみ配置できます。`SELECT ? FROM table` のような構文はサポートされていません。
+ 疑問符パラメータを二重引用符または一重引用符で囲むことはできません (つまり、`'?'` および `"?"` は有効な構文ではありません)。
+ SQL 実行パラメータを文字列として扱うには、二重引用符ではなく一重引用符で囲む必要があります。
+ 必要に応じて、パラメータ化された条件に値を入力するときに `CAST` 関数を使用できます。たとえば、クエリでパラメータ化した `date` 型の列があり、データ `2014-07-05` をクエリする場合は、パラメータ値に `CAST('2014-07-05' AS DATE)` を入力すると結果が返されます。
+ 準備済みステートメントはワークグループ固有であり、準備済みステートメント名はワークグループ内で一意である必要があります。
+ 準備済みステートメントには IAM 許可が必要です。詳細については、「[準備済みステートメントへのアクセスを構成する](security-iam-athena-prepared-statements.md)」を参照してください。
+ Athena コンソールの実行パラメータを持つクエリでは、疑問符の数が最大 25 個に制限されます。

**Topics**
+ [考慮事項と制限事項](#querying-with-prepared-statements-considerations-and-limitations)
+ [実行パラメータを使用する](querying-with-prepared-statements-querying-using-execution-parameters.md)
+ [プリペアドステートメントを使用する](querying-with-prepared-statements-querying.md)
+ [その他のリソース](querying-with-prepared-statements-additional-resources.md)