2015-09-02 5 views
1

ALL У меня есть функция PostGreSQL, так это:как вызвать функцию пг с libpq и получить значение парам

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; 

Я хочу известен, как использовать libpq в моих гр кодов для посещения function - query_callouts и получить param io_cursor_ref и opstatus и errtext?

ответ

0

Вы можете вызвать функцию так же, как вы выполняете любой запрос:

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

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

opstatus и errtext будет установлен на соответствующие значения, если происходит исключение. io_cursor_ref содержит имя, которое вы передали функции.

Внутренне значение REFCURSOR это просто имя строки так называемый портала, содержащего активный запрос для курсора. Это имя может быть передано, присвоено другим переменным переменным и так далее, , не нарушая портала.

Примечание. Вы можете использовать refcursor только в рамках транзакции.

Все порталы неявно закрыты по окончании транзакции. Поэтому значение refcursor можно использовать для ссылки на открытый курсор только до завершения транзакции .

Вы можете использовать явную транзакцию:

begin; 
select * from query_callouts('mycur', 0, ''); 
fetch all in mycur; 
-- save or show the query result 
-- and finally 
commit; 

или использовать mycur внутри функции.

Котировки составляют от the documentation.

+0

это может работать в моем psql, но как работать в моем коде c/C++ с libpq? –

+0

Я не знаю, о чем вы спрашиваете. Ваш вопрос должен быть более конкретным. [Здесь] (http://www.postgresql.org/docs/9.4/static/libpq-example.html) вы можете найти полные примеры программ, если вы не знаете, как использовать libpq. – klin

+0

О, спасибо, я получаю код по вашей ссылке, мне это нужно. Я не использую libpq для –

0

Как и любой другой запрос.

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

Я подозреваю, что некоторые, если не все ваши параметры должны быть OUT параметров не INOUT параметров, хотя. Вы, по крайней мере, никогда не используете входное значение errtext.

 Смежные вопросы

  • Нет связанных вопросов^_^