如何使用 libpq 调用 pg 函数并获取参数值
how to call a pg function with libpq and get the param value
全部
我有一个 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 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 以及 opstatus 和 errtext?
这与任何其他查询一样。
SELECT * FROM query_callouts('cursorname', 4, 'msg')
我怀疑您的某些参数(如果不是全部的话)应该是 OUT
参数而不是 INOUT
参数。至少你永远不会使用 errtext
的输入值。
您可以像执行任何查询一样调用该函数:
select * from query_callouts('mycur', 0, '');
io_cursor_ref | opstatus | errtext
---------------+----------+---------
mycur | 0 |
(1 row)
如果发生异常,opstatus
和 errtext
将被设置为适当的值。
io_cursor_ref
包含您传递给函数的名称。
Internally, a refcursor value is simply the string name of a so-called
portal containing the active query for the cursor. This name can be
passed around, assigned to other refcursor variables, and so on,
without disturbing the portal.
请注意,您只能在事务中使用 refcursor。
All portals are implicitly closed at transaction end. Therefore a
refcursor value is usable to reference an open cursor only until the
end of the transaction.
您可以使用显式事务:
begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;
或在函数内部使用 mycur
。
全部 我有一个 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 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 以及 opstatus 和 errtext?
这与任何其他查询一样。
SELECT * FROM query_callouts('cursorname', 4, 'msg')
我怀疑您的某些参数(如果不是全部的话)应该是 OUT
参数而不是 INOUT
参数。至少你永远不会使用 errtext
的输入值。
您可以像执行任何查询一样调用该函数:
select * from query_callouts('mycur', 0, '');
io_cursor_ref | opstatus | errtext
---------------+----------+---------
mycur | 0 |
(1 row)
如果发生异常,opstatus
和 errtext
将被设置为适当的值。
io_cursor_ref
包含您传递给函数的名称。
Internally, a refcursor value is simply the string name of a so-called portal containing the active query for the cursor. This name can be passed around, assigned to other refcursor variables, and so on, without disturbing the portal.
请注意,您只能在事务中使用 refcursor。
All portals are implicitly closed at transaction end. Therefore a refcursor value is usable to reference an open cursor only until the end of the transaction.
您可以使用显式事务:
begin;
select * from query_callouts('mycur', 0, '');
fetch all in mycur;
-- save or show the query result
-- and finally
commit;
或在函数内部使用 mycur
。