| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Fast Forward | Next | |
SPI_exec 執行聲明的 SQL 命令獲取 count 行。
這個函數只能在已連接得過程中調用。如果 count 是零,則在命令適合的所有行上執行。 如果 count 大于 0,那麼命令執行的行數將被限制(很像一個 LIMIT 子句)。 比如,
SPI_exec("INSERT INTO tab SELECT * FROM tab", 5);將只允許最多 5 行插入表中。
你可以在一個字串裡傳遞多個命令,並且命令可以被規則重寫。 SPI_exec 返回最後執行的命令的結果。
(最後)一條命令執行返回的結果的實際行數會放在全局的變量 SPI_processed 裡 (除非函數返回的值是 SPI_OK_UTILITY)。如果函數的返回值是 SPI_OK_SELECT, 那麼你可以使用全局指針 SPITupleTable *SPI_tuptable 訪問結果行。
結構 SPITupleTable 是這樣定義的:
typedef struct
{
MemoryContext tuptabcxt; /* 結果表的內存環境 */
uint32 alloced; /* 分配的 vals 的數目 */
uint32 free; /* 空閒的 vals 數目 */
TupleDesc tupdesc; /* 行描述符 */
HeapTuple *vals; /* 數據行 */
} SPITupleTable;vals 是一個指向數據行的的指針數組。 (有效記錄的數目由 SPI_processed 給出)。 tupdesc 是一個行描述符,你可以傳遞給 SPI 函數處理這些數據行。 tuptabcxt,alloced,和 free 是 SPI 的內部字段,並非給 SPI 調用者使用的。
SPI_finish 釋放所有在當前過程中分配的 SPITupleTables。 如果你已經處理完特定的結果表,那麼可以更早地釋放它,方法是調用 SPI_freetuptable。
如果命令執行成功,那麼返回下列值之一(非負數):
如果執行了一個 SELECT(但不是 SELECT ... INTO)
如果執行了一條 SELECT ... INTO。
如果執行了一條 DELETE。
如果執行了一條 INSERT。
如果執行了一條 UPDATE。
如果執行了一條工具命令你(比如,CREATE TABLE)
發生錯誤時,返回下列負數值之一:
如果 command 是 NULL 或者 count 小于 0
如果企圖進行 COPY TO stdout 或者 COPY FROM stdin
如果企圖進行 DECLARE,CLOSE,或者 FETCH
如果企圖進行 BEGIN,COMMIT,或者 ROLLBACK
命令類型未知(不應該發生)
如果從一個未連接的過程中調用