

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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
```

## Parameters
<a name="r_PREPARE-parameters"></a>

 *plan\_name*   
給予此特定預備陳述式的任意名稱。此名稱在單一工作階段內必須是唯一的，且後續會用來執行或解除配置先前的預備陳述式。

 *datatype*   
預備陳述式的參數資料類型。若要在預備陳述式本身內參考參數，請使用 $1、$2，以此類推，最多為 $32767。

 *statement *   
任何 SELECT、INSERT、UPDATE 或 DELETE 陳述式。

## 使用須知
<a name="r_PREPARE_usage_notes"></a>

預備陳述式可採用參數：這些值會在陳述式執行時替換到其中。若要在預備陳述式中包含參數，請在 PREPARE 陳述式中提供資料類型清單，然後在要準備的陳述式本身內使用 $1、$2 等符號依位置參考參數。參數的數量上限為 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) 