如何使用SOCI动态绑定到PL / pgSQL函数?

时间:2016-09-28 04:03:44

标签: c++ postgresql plpgsql soci

我有这个PostgreSQL PL / pgSQL函数:

CREATE OR REPLACE FUNCTION get_people()
RETURNS SETOF people AS $$
BEGIN
RETURN QUERY SELECT * FROM people;
END;
$$ LANGUAGE plpgsql;

然后我尝试使用SOCI读取应用程序中的数据,使用以下代码:

session sql {"postgresql://dbname=postgres"};
row person {};
procedure proc = (sql.prepare << "get_people()", into(person));
proc.execute(true);

我希望person拥有第一个人的数据,但它只包含一个包含存储过程名称的列(即“get_people”)。

所以我不知道我在这里做错了什么,或者不做。它是PL / pgSQL代码还是SOCI代码?也许SOCI不支持存储过程的动态绑定。此外,这种方法只允许我读取第一行,但其余的行呢?我知道SOCI带有rowset类来读取结果集,但文档说它只适用于查询。请帮忙。

1 个答案:

答案 0 :(得分:1)

std::vector将返回一个类型为SELECT get_people()的列,以该过程命名。

people将为您提供预期的行为,将SELECT * FROM get_people()记录分解为其组成字段。

source判断,看起来像社会people类(或者至少是它的Postgres实现)很难以procedure而不是{{1}运行程序}}

我想这意味着您需要编写自己的查询,即:

SELECT ...