PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

SPI_modifytuple

SPI_modifytuple — 通过替换给定行中被选中的字段创建一行

Synopsis

HeapTuple SPI_modifytuple(Relation rel, HeapTuple row, int ncols,
                          int * colnum, Datum * values, const char * nulls)

描述

SPI_modifytuple 通过为被选中的列替换 新值来创建一个新行,并在其他位置复制原始行的列。 输入行不会被修改。 新行在上层执行器上下文中返回。

这个函数只能在连接到 SPI 期间使用。 否则它返回 NULL 并把 SPI_result 设为 SPI_ERROR_UNCONNECTED。

参数

Relation rel

只被用作该行的行描述符的来源。 (传一个关系而非行描述符是一个设计缺陷。)

HeapTuple row

要修改的行

int ncols

要更改的列的数量

int * colnum

一个长度为 ncols 的数组,包含要被更改的列的 编号(列号从 1 开始)

Datum * values

一个长度为 ncols 的数组,包含指定列的 新值

const char * nulls

一个长度为 ncols 的数组,描述哪些新值是 空的

如果 nulls 为 NULL,则 SPI_modifytuple 假定没有新值是 空的。 否则, nulls 数组的每个条目在相应新值非空时应为 ' ',在相应新值为空时应为 'n'。 (在后一种情况下,相应 values 条目中的实际值无关紧要。) 注意, nulls 不是一个文本字符串,只是一个 数组:它不需要 '\0' 终止符。

返回值

带有修改的新行,分配在上层执行器 上下文中,出错时为 NULL (错误指示见 SPI_result)

出错时, SPI_result 被设置如下:

SPI_ERROR_ARGUMENT

如果 rel 为 NULL,或 row 为 NULL,或 ncols 小于等于 0,或 colnum 为 NULL,或 values 为 NULL。

SPI_ERROR_NOATTRIBUTE

如果 colnum 包含一个无效的列号 (小于等于 0 或大于 row 中的列数)

SPI_ERROR_UNCONNECTED

如果 SPI 未处于活动状态