我有一个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_callouts并获得io_cursor_ref和选项和错误文本?
发布于 2015-09-02 11:00:03
您可以像执行任何查询一样调用该函数:
select * from query_callouts('mycur', 0, '');
io_cursor_ref | opstatus | errtext
---------------+----------+---------
mycur | 0 |
(1 row) 如果出现异常,opstatus和errtext将被设置为适当的值。io_cursor_ref包含传递给函数的名称。
在内部,折射游标值只是包含游标的活动查询的所谓门户的字符串名称。可以传递此名称,将其分配给其他回退游标变量,等等,而不会干扰门户。
注意,您只可以在事务中使用Refl游标。
所有门户都在事务端隐式关闭。因此,只有到事务结束时,才能使用recurcur标值引用打开的游标。
您可以使用显式事务:
begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;或者在函数中使用mycur。
引号来自文献资料。
发布于 2015-09-02 10:52:18
就像其他查询一样。
SELECT * FROM query_callouts('cursorname', 4, 'msg')不过,我怀疑您的一些参数(如果不是全部的话)应该是OUT参数,而不是INOUT参数。您至少不会使用errtext的输入值。
https://stackoverflow.com/questions/32350187
复制相似问题