powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть таблицу из процедуры
9 сообщений из 9, страница 1 из 1
Как вернуть таблицу из процедуры
    #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
Как вернуть таблицу из процедуры
    #35444315
geniusoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неужели никто не возвращал в программы результирующий набор данных?
...
Рейтинг: 0 / 0
Как вернуть таблицу из процедуры
    #35444423
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно возвращать setof records, можно refcursor.
Но, по-моему, это больше вопрос о PHP - что он может принять.
...
Рейтинг: 0 / 0
Как вернуть таблицу из процедуры
    #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
Как вернуть таблицу из процедуры
    #35458446
geniusoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
create type h_result as (id_res int4, text_res varchar ( 32 ), ...);
Это работает, спасибо. Но остался все равно вопрос. Можно ли сделать h_result динамическим, т.е. не создавать каждый раз для результирующего набора данных тип?
...
Рейтинг: 0 / 0
Как вернуть таблицу из процедуры
    #35458809
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geniusoff
Код: plaintext
create type h_result as (id_res int4, text_res varchar ( 32 ), ...);
Это работает, спасибо. Но остался все равно вопрос. Можно ли сделать h_result динамическим, т.е. не создавать каждый раз для результирующего набора данных тип?
Скорее всего нет, можно использовать единожды созданный тип в нескольких процедурах, но если в какой-либо ещё процедуре требуется вернуть абсолютно другой набор данных, то нужно создавать новый тип.
...
Рейтинг: 0 / 0
Как вернуть таблицу из процедуры
    #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
Как вернуть таблицу из процедуры
    #35458875
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UKYМожно. Посмотрите как это реализовано в http://sql.ru/forum/actualthread.aspx?tid=567191&pg=2
Здорово, возьму на заметку.
...
Рейтинг: 0 / 0
Как вернуть таблицу из процедуры
    #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
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как вернуть таблицу из процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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