如何用libpq调用pg函数并获取param值

时间:2015-09-02 10:02:11

标签: c postgresql function libpq

ALL         我有一个postgresql函数,所以这个:

SELECT distinct id, id FROM XX WHERE id LIKE '01%%' GROUP BY id
--                                              ^^

我想知道,如何在我的c代码中使用libpq访问函数 - query_callouts并获取param io_cursor_ref和opstatus和errtext?

2 个答案:

答案 0 :(得分:0)

它就像任何其他查询一样。

SELECT * FROM query_callouts('cursorname', 4, 'msg')

我怀疑,如果不是所有参数都应该是OUT参数而不是INOUT参数。您至少不能使用errtext的输入值。

答案 1 :(得分:0)

您可以像执行任何查询一样调用该函数:

select * from query_callouts('mycur', 0, '');

 io_cursor_ref | opstatus | errtext
---------------+----------+---------
 mycur         |        0 |
(1 row) 
如果发生异常,

opstatuserrtext将设置为适当的值。 io_cursor_ref包含您传递给函数的名称。

  

在内部,refcursor值只是所谓的字符串名称   包含游标的活动查询的门户网站。这个名字可以   传递,分配给其他refcursor变量,等等,   不打扰门户网站。

注意,您只能在事务中使用refcursor。

  

在交易结束时隐式关闭所有门户网站。因此a   refcursor值仅用于引用打开的游标,直到   交易结束。

您可以使用显式交易:

begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;

或在函数中使用mycur

报价来自the documentation