powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функции без указания типов данных в вызове
10 сообщений из 10, страница 1 из 1
Функции без указания типов данных в вызове
    #33057951
chAlx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот что посоветуете для такой проблемы:
есть база на PostgreSQL с десятками хранимых функций, и есть скрипты (на PHP), из которых эти функции вызываются (через SELECT). И есть большое желание в этих вызовах не указывать каждый раз список типов данных, возвращаемых функцией в виде record.

Т.е. вот как есть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR REPLACE FUNCTION public.function() RETURNS SETOF record AS '
declare result record;
begin
    for result in select fld1, fld2 from table
    loop return next result;
    end loop;
    return;
end' LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;

select * from function() as (fld1 int4, fld2 varchar( 10 ))

А хочется, чтобы запрос был попроще:

Код: plaintext
select * from function()

Можно указать функции табличный тип в качестве возвращаемого:

Код: plaintext
CREATE OR REPLACE FUNCTION public.function() RETURNS SETOF table

Но далеко не все функции возвращают строку таблицы; большинство, как минимум, что-нибудь джойнят.

Можно создать тип:

Код: plaintext
1.
2.
CREATE TYPE function_type AS (fld1 int4, fld2 varchar( 10 ));

CREATE OR REPLACE FUNCTION public.function() RETURNS SETOF function_type

Но для множества функций это не слишком удобно, да и при изменении параметров функции придётся переедлывать тип.

Что ещё можно придумать, чтобы возвращать набор разнотипных данных и не указывать эти типы в запросах?
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33062633
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а зачем это нужно?

что такого страшного в запросах? зато хоть понятно (ИМХО) что запросы делают и какие поля используются
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33063259
chAlx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabrа зачем это нужно?

что такого страшного в запросах? зато хоть понятно (ИМХО) что запросы делают и какие поля используются
Дык и так понятно:
select FLD1, FLD2 from FUNCTION(10)

А с типами получается, что при добавлении в процедуру возвращаемого поля все имеющиеся 30 вызовов надо переписывать.
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33063262
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ааа мля не туда запостил :-)) ИЗИНЕНИЯ
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33063266
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет туда запостил ща подумаю :-)
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33063273
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
аа понял надо VIEW

если конечно у вас постгр их поддерживает
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33063344
chAlx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что даст VIEW по-сравнению с отдельным типом под каждую функцию?
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33063354
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну вообще это таблица (иногда и смотря где виртуальная) и работать с ней можно как с таблицей ...
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33068108
chAlx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки я не уяснил, каким именно образом можно избежать переделки всех запросов к функции, если в неё добавить ещё выводимых полей. Т.е. я знаю, что можно сделать тип и менять его вместе с функцией. А есть ли более простые способы, и если да, то какие именно?
...
Рейтинг: 0 / 0
Функции без указания типов данных в вызове
    #33068482
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
А хочется, чтобы запрос был попроще:

select * from function()
 

хочется чтобы функцию можно было использовать как таблицу для этого надо делать не функции (если там конечно нет какой либо навороченой логики), а страться реализовать все во вьюхах (которые как раз и являются виртуальными таблицами основанными на запросах)

если вы хотите чего нить изменить все равно придется что-то переделывать. Вопрос в том насколько много надо переделывать и вообще насколько это целесообразно.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Функции без указания типов данных в вызове
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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