SPI_exec(query, tcount)
SPI_OK_EXEC 正しく実行できた場合。 |
SPI_ERROR_UNCONNECTED 未接続なプロ シージャから呼び出された場合。 |
SPI_ERROR_ARGUMENT 引数 query が NULL または tcount < 0 の場合。 |
SPI_ERROR_UNCONNECTED 未接続なプロ シージャから呼び出された場合。 |
SPI_ERROR_COPY COPY TO/FROM stdin の場合。 |
SPI_ERROR_CURSOR DECLARE/CLOSE CURSOR, FETCH の場合。 |
SPI_ERROR_TRANSACTION BEGIN/ABORT/ENDの場合 |
SPI_ERROR_OPUNKNOWN 未知の問い合わせ タイプの場合。(これはあってはなりません。) |
問い合わせの実行が成功した場合、以下の(非負の)値のいずれかが返ります。
SPI_OK_UTILITY ユーティリティ(例えば CREATE TABLE ... )が実行された場合。 |
SPI_OK_SELECT ( SELECT ... INTO 以外!の)SELECTが実行された場合。 |
SPI_OK_SELINTO SELECT ... INTO が実行された場合。 |
SPI_OK_INSERT INSERT(または、INSERT ... SELECT)が実行された場合。 |
SPI_OK_DELETE DELETE が実行された場合。 |
SPI_OK_UPDATE UPDATE が実行された場合。 |
接続済みのプロシージャからのみこの関数を呼び出して下さい。 tcount が 0 ならば、問い 合わせスキャンが返した全てのタプルについて問い合わせを行ないます。 tcount > 0とすることで、 問い合わせの対象となるタプルの数を制限することができます。例えば、
SPI_exec ("insert into table select * from table", 5);では、最大 5 個のタプルをテーブルに挿入することができます。問い合 わせの実行が成功した場合、非負の値が返ります。
Note: 1 個の文字列の中に複数の問い合わせを入れて渡したり、RULE システムによっ て複数の問い合わせに書き換えられる可能性のある文字列を渡しても構いませ ん。SPI_exec は最後に実行された問い合わせの結果を 返します。
実際に(最後の)問い合わせの処理対象となったタプルの数は( SPI_OK_UTILITY でない限り)大域変数 SPI_processed に設定されます。もし SPI_OK_SELECT が返り、SPI_processed > 0 ならば、大域変数である SPITupleTable *SPI_tuptableというポインタを使っ て、選択されたタプルにアクセスできます。また、 SPI_finish はすべての SPITupleTable を開放しますの で、SPITupleTable は使用できなくなることに注意して下さい!(メモリ管理の 項を参照して下さい。)
SPI_execは次の(負の)値を返す可能性があります。
SPI_ERROR_ARGUMENT 引数 query が NULL または tcount < 0 の場合。 |
SPI_ERROR_UNCONNECTED 未接続なプロシージャの場合。 |
SPI_ERROR_COPY COPY TO/FROM stdin の場合。 |
SPI_ERROR_CURSOR DECLARE/CLOSE CURSOR、FETCH の場合。 |
SPI_ERROR_TRANSACTION BEGIN/ABORT/END の場合。 |
SPI_ERROR_OPUNKNOWN 未知の問い合わせタイプの場合。(これはあってはいけません。) |