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