0

我正在 PL/pgSQL 函数中运行计算,并且我想在我的 C++ 代码中使用该计算的结果。最好的方法是什么?

我可以将该结果插入表格并从那里使用它,但我不确定最佳实践的效果如何。另外,我可以向stderrwith发送消息,RAISE NOTICE但我不知道是否可以在我的代码中使用该消息。

4

1 回答 1

1

这里的细节在地面上有点薄,所以很难确定。

只要有可能,最好直接获取函数的返回值SELECT my_function(args)如果它返回单个结果,或者SELECT * FROM my_function(args);如果它返回一行或一组行。然后像处理任何其他查询结果一样处理结果。这是简单 SQL 和 PL/PgSQL 函数基本使用的一部分

其他选项包括:

  • 返回一个 refcursor。在您想要返回动态结果集或多个结果集的某些情况下,这可能很有用,尽管它现在主要被RETURN QUERYand取代RETURN QUERY EXECUTE。然后您FETCH从 refcursor中获取结果行。

  • LISTEN处理一个事件在工作完成时拥有该功能NOTIFY,可能将结果作为通知有效负载。当函数不一定在与想要使用其结果的程序相同的连接上调用时,这很有用。

  • 在函数中创建一个临时表,然后SELECT从调用该函数的会话中的表中创建。

  • 通过发送日志消息RAISE并设置client_min_messages以便您接收它们,然后处理它们。这是一种非常丑陋的做法,应该不惜一切代价避免。

  • INSERT将结果放入现有的非临时表中,然后SELECT在事务提交并且行对其他事务可见时将它们取出。

哪个更好?这完全取决于你想要做什么。在几乎所有情况下,正确的做法是调用函数并处理返回值,但在特殊情况下也有例外。

于 2013-07-26T07:29:52.367 回答