VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

逐行检索查询结果

PQsetSingleRowMode

功能描述

为当前执行的查询选择单行模式。

通常,libpq收集SQL命令的全部结果并作为单个PGresult 返回到应用中。这对于返回大量行的命令是不可能实现的。对于这种情况, 应用可以在单行模式中使用PQsendQuery和PQgetResult。 在这个模式中,结果行一次返回一行到应用中,就像从服务器中接收到它们一样。

要进入单行模式,在成功调用PQsendQuery(或者一个兄弟函数) 之后立即调用PQsetSingleRowMode。这种模式选择只对当前执行的查询有效。 然后重复的调用PQgetResult,直到它返回空。如果查询返回任意行,它们作为独立的PGresult对象返回, 就像普通的查询结果,除了状态码是PGRES_SINGLE_TUPLE而不是 PGRES_TUPLES_OK。在最后一行之后,或者一旦查询返回零行, 返回一个带有状态PGRES_TUPLES_OK的零行对象; 这是没有更多行的信号。(但仍需要继续调用PQgetResult 直到它返回空)所有这些PGresult对象将包含相同的描述数据 (字段名、类型等),就像该查询的一个普通PGresult对象拥有的那样。最终还应该使用PQclear释放。

接口原型

int PQsetSingleRowMode(PGconn *conn);

参数说明

参数 描述
conn 建立连接时返回的连接结构体指针,该指针用于标识某个特定连接。

返回值

这个函数只能在PQsendQuery或它的一个兄弟函数之后立即调用, 在任何连接上的其他操作,比如PQconsumeInput或 PQgetResult之前。如果在正确的时间调用了, 该函数为当前查询激活单行模式并返回1。否则模式保持不变并返回0。在任何情况下, 该模式在当前查询完成之后恢复到正常。

其他

处理一个查询时,服务器可能返回一些行然后遇到一个错误,导致查询退出。通常, libpq丢弃任何这样的行并且只报告错误。但是在单行模式中, 这些行已经返回到应用中。因此,应用会先看到一些单行结果,而后发生错误。对于适当的事务行为, 如果查询最终失败了,那么应用必须为抛弃或撤销先前处理的行而进行设计。