Server Programming Interface ( SPI )はユーザ定義の C 関数から SQL 問い合わせを実行する機能をユーザに 提供します。使用可能な手続き言語( PL )はこの機能 にアクセスする別の方法を提供しています。
実際には、SPI は、パーサ、プランナ、オブティマイザ、 エグゼキュータへのアクセスを単純化にするための一連の組み込み関数 群に過ぎ ません。また、SPI はメモリ管理も行ないます。
誤解を防ぐために、これ以降、関数 を SPI インタフェース関数の意味で、 プロシージャ を SPI を呼び出すユーザ定義の C 関数の意味で使 うことにします。
SPI を使うプロシージャはエグゼキュータから 呼び出されます。SPIは問い合わせを実行するために エグゼキュータを順番に再帰的に呼び出します。エグゼキュータが再帰的に 呼び出されると、それ自身でSPIを呼び出す プロシージャを呼び出す場合があります。
プロシージャの中で問い合わせを実行している最中にトランザクションが中断すると、 そのプロシージャに制御が戻らないということに注意して下さい。 それどころか、 全ての実行結果がロールバックされてサーバはクラ イアントからの次のコマンドを 待つ状態になります。この仕様は将来の版で変更される予定です。
この他の制約として、(トランザクションの制御文である)BEGIN、END、 ABORT とカーソル操作ができないという点があります。これも将来変更される予定です。
SPI 関数は、成功すると非負の結果を(後述のように、 整数値または SPI_result 大域変数のどちらかを通して)返します。失敗した場合 は、負または NULL という結果を返します。