PostgreSQL 8.4.1文書
前のページ | 巻戻し |  | 早送り | 次のページ

# SPI_prepare

## 名前

SPI_prepare -- コマンドの計画を準備する。コマンドの実行はまだ行わない

## 概要

    SPIPlanPtr SPI_prepare(const char * command, int nargs, Oid * argtypes)

## 説明

`SPI_prepare`は指定したコマンド用の実行計画を作成し、それを返します。 しかし、そのコマンドは実行しません。 この関数は接続済のプロシージャからのみ呼び出さなければなりません。

同じ、あるいは類似のコマンドが繰り返し実行される場合、一度だけ計画作成を行うことに利点があります。 `SPI_prepare`はコマンド文字列を、`SPI_execute_plan`を使用して繰り返し実行することができる実行計画に変換します。

プリペアドコマンドは、通常のコマンド内の定数となる場所を（`$1`、`$2`などの）パラメータで記述することで一般化することができます。 そしてパラメータの実際の値は、`SPI_execute_plan` が呼び出される時に指定されます。 これにより、プリペアドコマンドは、パラメータがない場合に比べ、より広範な状況で使用できるようになります。

`SPI_finish`は計画用に割り当てられたメモリを解放しますので、`SPI_prepare`で返される計画は、そのプロシージャの現在の呼び出し内でのみ使用することができます。 しかし、`SPI_saveplan`関数を使用して長期間計画を保存することもできます。

## 引数

`const char * `command``

  コマンド文字列。

`int `nargs``

  （`$1`、`$2`など）入力パラメータ数。

`Oid * `argtypes``

  パラメータのデータ型のOIDを持つ配列へのポインタ。

## 戻り値

`SPI_prepare`は、実行計画への非NULLのポインタを返します。 エラーの場合、`NULL`が返され、`SPI_execute`で使用されるエラーコードと同じコードの1つが`SPI_result`に設定されます。 しかし、`command`が`NULL`の場合や、`nargs`が0未満の場合、`nargs`が0より大きくかつ`argtypes`が`NULL`の場合は、`SPI_ERROR_ARGUMENT`に設定されます。

## 注意

`SPIPlanPtr`は`spi.h`内でopaque構造体型へのポインタとして宣言されています。 たいていの場合将来のバージョンのPostgreSQLでそのコードが壊れてしまうため、この内容に直接アクセスすることは避けてください。

パラメータを使用する場合欠点があります。 プランナはパラメータに与えられる値が何であるかを理解しませんので、全ての定数が可視である単純な問い合わせで作成されるものより、問い合わせ計画の選択が悪化する可能性があります。

前のページ | ホーム | 次のページ
SPI_execute_with_args | 上に戻る | SPI_prepare_cursor