C 如何使用libpq调用pg函数并获取参数值

C 如何使用libpq调用pg函数并获取参数值,c,postgresql,function,libpq,C,Postgresql,Function,Libpq,全部 我有一个postgresql函数,因此: 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

全部 我有一个postgresql函数,因此:

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\u callout并获取参数io\u cursor\u ref和opstatus以及errtext?

这与任何其他查询一样

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

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

这与任何其他查询一样

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

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

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

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

 io_cursor_ref | opstatus | errtext
---------------+----------+---------
 mycur         |        0 |
(1 row) 
如果发生异常,
opstatus
errtext
将设置为适当的值。
io\u cursor\u ref
包含传递给函数的名称

在内部,refcursor值只是所谓 包含光标的活动查询的门户。这个名字可以是 传递、分配给其他refcursor变量等, 不干扰入口

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

所有门户都在事务结束时隐式关闭。因此 refcursor值仅在 交易结束

您可以使用显式事务:

begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;
或者在函数中使用
mycur


引号来自。

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

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

 io_cursor_ref | opstatus | errtext
---------------+----------+---------
 mycur         |        0 |
(1 row) 
如果发生异常,
opstatus
errtext
将设置为适当的值。
io\u cursor\u ref
包含传递给函数的名称

在内部,refcursor值只是所谓 包含光标的活动查询的门户。这个名字可以是 传递、分配给其他refcursor变量等, 不干扰入口

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

所有门户都在事务结束时隐式关闭。因此 refcursor值仅在 交易结束

您可以使用显式事务:

begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;
或者在函数中使用
mycur


引用自。

这是一个可以在我的psql中工作的问题,但是如何使用libpq在我的c/c++代码中工作?我不知道你在问什么。你的问题应该更具体一些。如果你不知道如何使用libpq,你可以找到完整的示例程序。哦,谢谢你,我通过你的链接得到它的代码,这是我需要的。我不使用libpq,这可以在我的psql中工作,但是如何使用libpq在我的c/c++代码中工作?我不知道你在问什么。你的问题应该更具体一些。如果你不知道如何使用libpq,你可以找到完整的示例程序。哦,谢谢你,我通过你的链接得到它的代码,这是我需要的。我不使用libpq来