如何使用SOCI动态绑定到PL/pgSQL函数
How to do a dynamic binding to a PL/pgSQL function using 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
类一起提供,用于读取结果集,但文档说它只适用于查询。请帮助。
SELECT get_people()
将返回以过程命名的people
类型的单列。
SELECT * FROM get_people()
将给你期望的行为,将people
记录分解成它们的组成字段。
从源代码来看,看起来SOCI procedure
类(或者至少是它的Postgres实现)是硬连接到以SELECT ...
而不是SELECT * FROM ...
的方式运行过程的。
我猜这意味着你需要编写自己的查询,即:
statement stmt = (sql.prepare << "SELECT * FROM get_people()", into(person));
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 如何从C++代码调用 PL/pgSQL 函数
- 在C++代码中处理 PL/pgSQL 函数的消息
- SOCI, pgsql函数返回表记录- type_conversion不工作
- 如何使用SOCI动态绑定到PL/pgSQL函数