Re: Cursor names in a self-nested function

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: Cursor names in a self-nested function
Дата
Msg-id CAFj8pRA363gGDweH4Qgur0c7QWZwiYe2V1xMNbH+GiGZxLG8Sw@mail.gmail.com
обсуждение исходный текст
Ответ на Cursor names in a self-nested function  ("Kidd, David M" <d.kidd@imperial.ac.uk>)
Ответы Re: Cursor names in a self-nested function  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-sql
Hello

you can use a refcursor  type

http://developer.postgresql.org/pgdocs/postgres/plpgsql-cursors.html

Regards

Pavel Stehule

2011/8/18 Kidd, David M <d.kidd@imperial.ac.uk>:
> Hi,
>
> I am trying to write a function that contains a cursor and iteratively calls
> itself.
>
> It is along the lines of,
>
> CREATE FUNCTON test(id integer) RETURNS TEXT AS
> $BODY$
> DECLARE
>   mycursor CURSOR FOR SELECT * FROM myfunction(id);
>   newid INTEGER;
>   out = TEXT;
> BEGIN
>   out := '';
>   OPEN mycursor;
>   LOOP
>     FETCH my_cursor INTO newid;
>     out := out || test (newid);
>   END LOOP;
>   RETURN out;
> END;
>  $BODY$
> LANGUAGE 'plpgsql' VOLATILE
>
> This returns an ERROR stating that "mycursor" is already in use.
>
> I understand this occurs because cursor names must be unique across, as well
> as within, functions.
>
> So, my question is whether there is a way I can dynamically declare a cursor
> name, for example by appending a incremental number or guid to make the name
> unique?
> Just trying to concatenate two passed arguments in the DECLARE statement
> unsurprisingly fails.
>
> Any other solutions are of cause welcome.
>
> Many thanks,
>
>  - David
>
>
>
> David M. Kidd
>
> Research Associate
> Center for Population Biology
> Silwood Park Campus
> Imperial College London
> 0207 594 2470
>
>


В списке pgsql-sql по дате отправления:

Предыдущее
От: "Kidd, David M"
Дата:
Сообщение: Cursor names in a self-nested function
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Cursor names in a self-nested function