首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用libpq调用pg函数并获取param值

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

Stack Overflow用户
提问于 2015-09-02 10:02:10
回答 2查看 632关注 0票数 1

我有一个postgresql函数,所以如下:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION query_callouts(

    INOUT io_cursor_ref refcursor,
    INOUT opstatus integer,
    INOUT errtext character varying)
  RETURNS record AS
$BODY$
DECLARE

BEGIN

  OPEN $1 FOR
    SELECT tablename FROM pg_tables limit 10;
    --SELECT * from call_out_numbers;

  RETURN;
  Exception
    When Others Then
        GET STACKED DIAGNOSTICS opstatus = RETURNED_SQLSTATE,
                               errText = MESSAGE_TEXT;
END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION query_callouts(refcursor, integer, character varying)
  OWNER TO postgres;

我想知道,如何在我的c++代码中使用libpq访问函数- query_callouts并获得io_cursor_ref和选项和错误文本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-02 11:00:03

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

代码语言:javascript
复制
select * from query_callouts('mycur', 0, '');

 io_cursor_ref | opstatus | errtext
---------------+----------+---------
 mycur         |        0 |
(1 row) 

如果出现异常,opstatuserrtext将被设置为适当的值。io_cursor_ref包含传递给函数的名称。

在内部,折射游标值只是包含游标的活动查询的所谓门户的字符串名称。可以传递此名称,将其分配给其他回退游标变量,等等,而不会干扰门户。

注意,您只可以在事务中使用Refl游标。

所有门户都在事务端隐式关闭。因此,只有到事务结束时,才能使用recurcur标值引用打开的游标。

您可以使用显式事务:

代码语言:javascript
复制
begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;

或者在函数中使用mycur

引号来自文献资料

票数 0
EN

Stack Overflow用户

发布于 2015-09-02 10:52:18

就像其他查询一样。

代码语言:javascript
复制
SELECT * FROM query_callouts('cursorname', 4, 'msg')

不过,我怀疑您的一些参数(如果不是全部的话)应该是OUT参数,而不是INOUT参数。您至少不会使用errtext的输入值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32350187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档