SPI_prepare

名前

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

概要

void * 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に設定されます。 しかし、commandNULLの場合や、nargsが0未満の場合、nargsが0より大きくかつargtypesNULLの場合は、SPI_ERROR_ARGUMENTに設定されます。

注意

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