Cursor names in a self-nested function

Поиск
Список
Период
Сортировка
От Kidd, David M
Тема Cursor names in a self-nested function
Дата
Msg-id 92F7EFF74482D04B8548581D147F6AE70403DF@icexch-m3.ic.ac.uk
обсуждение исходный текст
Ответы Re: Cursor names in a self-nested function  (Pavel Stehule <pavel.stehule@gmail.com>)
Список pgsql-sql
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 по дате отправления:

Предыдущее
От: "Igor Neyman"
Дата:
Сообщение: Re: which is better: using OR clauses or UNION?
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: Cursor names in a self-nested function