Re: select from function

Поиск
Список
Период
Сортировка
От Darren Ferguson
Тема Re: select from function
Дата
Msg-id Pine.LNX.4.10.10205022102220.13370-100000@thread.crystalballinc.com
обсуждение исходный текст
Ответ на select from function  (Anna Dorofiyenko <anna.dorofiyenko@xdrive.com>)
Ответы Re: select from function  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
What would you do with the REFCURSOR from what i see you would not be able
to fetch the next row anyway and i do not believe from my knowledge.

You would have to have the cursor in a transaction but returning it from a
function does not seem to work yet.

Check below

dev=> begin
dev-> ;
BEGIN
dev=> declare test cursor for SELECT * from inv_locations;
DECLARE

dev=> fetch forward 1 from test;
 inv_loc_id | inv_loc_disp_id | inv_loc_type | inv_loc_full_description |
sort
------------+-----------------+--------------+--------------------------+--------------
       1368 | Section 4       |           20 | This is a test           |
0/1006/1368/
(1 row)

dev=> fetch forward 1 from test;
 inv_loc_id | inv_loc_disp_id | inv_loc_type |
inv_loc_full_description                  |     sort

------------+-----------------+--------------+------------------------------------------------------------+--------------
       1053 | Section 1       |           20 | This is the first section
of the Lansdowne housing project | 0/1006/1053/
(1 row)

dev=> fetch forward 1 from test;
 inv_loc_id | inv_loc_disp_id | inv_loc_type |
inv_loc_full_description             |  sort
------------+-----------------+--------------+-------------------------------------------------+---------
       1006 | Lansdowne       |           16 | This is the primary SN for
the Openband company | 0/1006/
(1 row)

dev=> fetch backward 1 from test;
 inv_loc_id | inv_loc_disp_id | inv_loc_type |
inv_loc_full_description                  |     sort

------------+-----------------+--------------+------------------------------------------------------------+--------------
       1053 | Section 1       |           20 | This is the first section
of the Lansdowne housing project | 0/1006/1053/
(1 row)

dev=> commit;

The above worked no problems

Now tried function

CREATE OR REPLACE FUNCTION test(integer,integer) RETURNS REFCURSOR AS '
DECLARE
  one ALIAS FOR $1;
  two ALIAS FOR $2;
  test cursor for SELECT * from inv_locations;
BEGIN
  RETURN test;
END;' LANGUAGE 'plpgsql';

dev=> begin;
BEGIN
dev=> select test(4,5);
 test
------
 test
(1 row)

dev=> fetch forward 1 from test;
NOTICE:  PerformPortalFetch: portal "test" not found
FETCH 0
dev=> rollback;
ROLLBACK
dev=>

So this leads me to believe that it is not supported this way

HTH

Darren Ferguson

On Thu, 2 May 2002, Anna Dorofiyenko wrote:

> Here is what I need to do:
> select from table1,myFunction(parameter1,parameter2)
> where...
> assuming that myFunction returns refcursor.
>
> Can this be done? If yes, then how?
>
> Anna.
>
>


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Subject: bool / vacuum full bug followup
Следующее
От: Darren Ferguson
Дата:
Сообщение: Re: order of adding date & interval values?