Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть таблицу из процедуры / 9 сообщений из 9, страница 1 из 1
21.07.2008, 18:39
    #35443157
geniusoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
Все доброго времени суток!
Есть функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF record AS
$BODY$
 SELECT * FROM "Content" ;
$BODY$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;




Она возвращает значение: (asdhkj,/,1,123,2345,35)

как сделать так, чтобы эта функция возвращала такое значение, как возвращает следующий вызов этой процедуры:

Код: plaintext
1.
2.
3.
4.
5.
select * from getAllFoo() as t1(id character varying( 32 ),
  path_name character varying( 2048 ),
  class_id integer,
  object_id integer,
  owner_id integer,
  description character varying( 4096 ));

Т.е. функция должна возвращать данные в таком виде, чтобы в дальнейшем была возможность профетчить их в php
Заранее спасибо
...
Рейтинг: 0 / 0
22.07.2008, 12:24
    #35444315
geniusoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
неужели никто не возвращал в программы результирующий набор данных?
...
Рейтинг: 0 / 0
22.07.2008, 12:53
    #35444423
tadmin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
Можно возвращать setof records, можно refcursor.
Но, по-моему, это больше вопрос о PHP - что он может принять.
...
Рейтинг: 0 / 0
22.07.2008, 12:53
    #35444424
YuriyRusinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
Нужно определить что-то типа
Код: plaintext
create type h_result as (id_res int4, text_res varchar ( 32 ), ...);
и далее писать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace function fooTest () returns setof h_result as'
declare
    r h_result%rowtype;
    query varchar;
begin
    query = \'select id, text from table1;\';
    for r in
        execute query
    loop
        return next r;
    end loop;
    return;
end;
'language 'plpgsql';
Сие подробно описано в документации по Postgresql
...
Рейтинг: 0 / 0
29.07.2008, 16:31
    #35458446
geniusoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
Код: plaintext
create type h_result as (id_res int4, text_res varchar ( 32 ), ...);
Это работает, спасибо. Но остался все равно вопрос. Можно ли сделать h_result динамическим, т.е. не создавать каждый раз для результирующего набора данных тип?
...
Рейтинг: 0 / 0
29.07.2008, 18:24
    #35458809
YuriyRusinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
geniusoff
Код: plaintext
create type h_result as (id_res int4, text_res varchar ( 32 ), ...);
Это работает, спасибо. Но остался все равно вопрос. Можно ли сделать h_result динамическим, т.е. не создавать каждый раз для результирующего набора данных тип?
Скорее всего нет, можно использовать единожды созданный тип в нескольких процедурах, но если в какой-либо ещё процедуре требуется вернуть абсолютно другой набор данных, то нужно создавать новый тип.
...
Рейтинг: 0 / 0
29.07.2008, 18:49
    #35458855
UKY
UKY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
geniusoff
Код: plaintext
create type h_result as (id_res int4, text_res varchar ( 32 ), ...);
Это работает, спасибо. Но остался все равно вопрос. Можно ли сделать h_result динамическим, т.е. не создавать каждый раз для результирующего набора данных тип?

Можно. Посмотрите как это реализовано в http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2
...
Рейтинг: 0 / 0
29.07.2008, 18:59
    #35458875
YuriyRusinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
UKYМожно. Посмотрите как это реализовано в http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2
Здорово, возьму на заметку.
...
Рейтинг: 0 / 0
30.07.2008, 16:25
    #35460918
domanix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть таблицу из процедуры
Или вот еще примерчик...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION myrecordset
(in cnt integer, out id integer, out name text, out b bit)
RETURNS SETOF record LANGUAGE 'plpgsql'  AS $body$
declare    x integer= 0 ;
              r record;
begin
for r in select oid,pg_class.relname, 1  as ff from pg_class loop
 id=r.oid;
 name=r.relname;
 b=r.ff;
 return next;
end loop;

while x<cnt loop
   id=x;    name='x^2='||x*x;  b= 1 ;
   x=x+ 1 ;return next;
 end loop;
end $body$;
Код: plaintext
1.
select * from myrecordset( 100 );
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть таблицу из процедуры / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]