.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "SPI_exec" "" "2004-06-19" "" "PostgreSQL 7.4.5 文書"
.SH NAME
SPI_exec \- コマンドを実行します。

.SH SYNOPSIS
.sp
.nf
int SPI_exec(const char * \fIcommand\fR, int \fIcount\fR)
.sp
.fi
.SH "説明"
.PP
\fBSPI_exec\fR は指定したSQLコマンドを、\fIcount\fR行分実行します。
.PP
この関数は、接続したプロシージャからのみ呼び出さなければなりません。
\fIcount\fRが0の場合、そのコマンドを、適用されるすべての行に対して実行します。
\fIcount\fRが0より多ければ、そのコマンドが実行される行数は制限されます。
(ほぼLIMITと似ています。)
例えば、
.sp
.nf
SPI_exec("INSERT INTO tab SELECT * FROM tab", 5);
.sp
.fi
は、テーブルに挿入できる行は多くても5行のみです。
.PP
複数のコマンドを1つの文字列として渡すことができます。
コマンドはルールによって書き換えられることもあります。
\fBSPI_exec\fRは最後に実行したコマンドの結果を返します。
.PP
(最後の)コマンドが実行した実際の行数は、(関数の戻り値が\fBSPI_OK_UTILITY\fRでない限り)SPI_processedグローバル変数内で渡されます。
関数の戻り値が\fBSPI_OK_SELECT\fRの場合、
SPITupleTable *SPI_tuptable グローバルポインタを使用して、結果の行にアクセスすることができます。
.PP
\fBSPITupleTable\fR構造体は以下のように定義されています。
.sp
.nf
typedef struct
{
    MemoryContext tuptabcxt;    /* memory context of result table */
    uint32      alloced;        /* number of alloced vals */
    uint32      free;           /* number of free vals */
    TupleDesc   tupdesc;        /* row descriptor */
    HeapTuple  *vals;           /* rows */
} SPITupleTable;
.sp
.fi
\fBvals\fR が行へのポインタの配列です。
(有効な項目数はSPI_processedで判明します。)
\fBtupdesc\fRは、行を扱うSPI関数に渡すことができる行記述子です。
\fBtuptabcxt\fR、\fBalloced\fR、\fBfree\fRはSPI呼び出し元での使用を意図していない内部的なフィールドです。
.PP
\fBSPI_finish\fR は、現在のプロシージャで割り当てられたすべての\fBSPITupleTable\fRを解放します。
\fBSPI_freetuptable\fRを呼び出して解放する場合、特定の結果テーブルを早めに解放することができます。
.SH "引数"
.TP
\fBconst char * \fIcommand\fB\fR
実行するコマンドを含む文字列。
.TP
\fBint \fIcount\fB\fR
処理される、あるいは、返される行の最大数。
.SH "戻り値"
.PP
コマンドの実行に成功した場合、以下のいずれかの(非負の)値が返されます。
.TP
\fBSPI_OK_SELECT\fR
\fBSELECT\fR (\fBSELECT ... INTO\fRを除く)が実行された場合。
.TP
\fBSPI_OK_SELINTO\fR
\fBSELECT ... INTO\fRが実行された場合。
.TP
\fBSPI_OK_DELETE\fR
\fBDELETE\fR が実行された場合。
.TP
\fBSPI_OK_INSERT\fR
\fBINSERT\fR が実行された場合。
.TP
\fBSPI_OK_UPDATE\fR
\fBUPDATE\fR が実行された場合。
.TP
\fBSPI_OK_UTILITY\fR
ユーティリティコマンド(\fBCREATE TABLE\fRなど)が実行された場合。
.PP
.PP
エラーの場合、以下のいずれかの負の値が返されます。
.TP
\fBSPI_ERROR_ARGUMENT\fR
\fIcommand\fRが\fBNULL\fR、あるいは、\fIcount\fRが0未満の場合。
.TP
\fBSPI_ERROR_COPY\fR
\fBCOPY TO stdout\fR あるいは \fBCOPY FROM stdin\fRが試行された場合。
.TP
\fBSPI_ERROR_CURSOR\fR
\fBDECLARE\fR、\fBCLOSE\fR、\fBFETCH\fRが試行された場合。
.TP
\fBSPI_ERROR_TRANSACTION\fR
\fBBEGIN\fR、\fBCOMMIT\fR、\fBROLLBACK\fR が試行された場合。
.TP
\fBSPI_ERROR_OPUNKNOWN\fR
コマンド種類が不明な場合。(起きてはなりません。)
.TP
\fBSPI_ERROR_UNCONNECTED\fR
未接続なプロシージャから呼び出された場合。
.PP
.SH "注意"
.PP
\fBSPI_exec\fR、\fBSPI_execp\fR、\fBSPI_prepare\fR は SPI_processed と SPI_tuptable の両方を変更します。(ポインタのみで、構造体の内容は変更しません。)
\fBSPI_exec\fR もしくは \fBSPI_execp\fR 
の結果を後の呼び出しと跨ってアクセスしたいのであれば、これら2つのグローバル変数を局所的なプロシージャ変数に保存して下さい。
