在C++代码中处理 PL/pgSQL 函数的消息
Handling PL/pgSQL function's message in C++ code
我正在PL/pgSQL函数中运行一个计算,我想在C++代码中使用该计算的结果。最好的方法是什么?
我可以将结果插入到表中并从中使用,但我不确定最佳实践的效果如何。此外,我可以用RAISE NOTICE
向stderr
发送消息,但我不知道我是否可以在代码中使用该消息。
这里的细节有点肤浅,所以很难说。
只要有可能,强烈建议直接获取函数的返回值。如果返回单个结果,则返回SELECT my_function(args)
;如果返回一行或一组行,则返回SELECT * FROM my_function(args);
。然后像处理其他查询结果一样处理结果。这是简单SQL和PL/PgSQL函数基本使用的一部分。
其他选项包括:
-
返回refcursor。在某些情况下,如果您希望返回一个动态结果集或多个结果集,尽管它现在主要被
RETURN QUERY
和RETURN QUERY EXECUTE
取代,但这可能很有用。然后从refcursor中FETCH
来获得结果行。 -
LISTEN
用于事件,并且在工作完成时具有函数NOTIFY
,可能将结果作为通知有效载荷。当函数不一定与想要使用其结果的程序在同一连接上调用时,这很有用。 -
在函数中创建一个临时表,然后从调用该函数的会话的表中创建
SELECT
。 -
通过
RAISE
发出日志消息,并设置client_min_messages
以便接收它们,然后处理它们。这是一种非常丑陋的做法,真的应该不惜一切代价避免。 -
INSERT
将结果放入一个现有的非临时表中,然后在事务提交并且行对其他事务可见后SELECT
将其取出。
哪个更好?这完全取决于你想做什么。在几乎所有情况下,正确的做法就是调用函数并处理返回值,但在特殊情况下也有例外。
- "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函数