Skip to content

SPI_modifytuple ​

SPI_modifytuple — 通过替换给定行中选定字段来创建行

概要 ​

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。

参数 ​

关系 rel

仅用作行的行描述符的源。(传递关系而不是行描述符是一个错误功能。)

堆元组 row

要修改的行

int ncols

要更改的列数

int * colnum

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

Datum * values

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

const char * nulls

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

如果 nulls 为 NULL,则 SPI_modifytuple 假设没有新值为空。否则,如果相应的新值不为空,则 nulls 数组的每个条目应为 ' ';如果相应的新值为 null,则应为 '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 未激活