powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оператор With в функции
5 сообщений из 5, страница 1 из 1
Оператор With в функции
    #39157056
kolts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал функцию такого вида
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION get_all_foo() RETURNS table foo(.......) AS
$BODY$
BEGIN
    with t as (....),
    t1 as (....),
    t2 as (....),
    t3 as (....) --непонятно что здесь хочет еще один оператор
select 1; --без этого оператора не хочет работать
return query select * from t3;
END
$BODY$
LANGUAGE plpgsql;


Никак не хочет возвращать результат хотя все что внутри тела функции без нее мне выдает результат. Типы в " RETURNS table foo(.......)" соответствуют возвращаемой таблице. Что я делаю не так с этим оператором WITH?
...
Рейтинг: 0 / 0
Оператор With в функции
    #39157090
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koltsНаписал функцию такого вида

Никак не хочет возвращать результат хотя все что внутри тела функции без нее мне выдает результат. Типы в " RETURNS table foo(.......)" соответствуют возвращаемой таблице. Что я делаю не так с этим оператором WITH?

Зачем функция?!
В начале просто создайте запрос.
Если он часто будет использоваться, то оформите в виде VIEW...
Если очень надо, то просто делайте вызов VIEW в вашей функции...
...
Рейтинг: 0 / 0
Оператор With в функции
    #39157273
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во первых with не "оператор" [не пойми какого языка], а "кляуза" sql--стейтмента, см тут
http://www.postgresql.org/docs/current/static/sql-select.html

koltsНаписал функцию такого вида
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
-- Поправил
CREATE OR REPLACE FUNCTION get_all_foo() RETURNS table (a int,b text) AS
$BODY$
BEGIN
	return query
	with t as (VALUES(1,'assa' ),(2,'assa' ),(3,'assa' ))
		,t1 as (VALUES(1,'assa' ),(2,'assa' ),(3,'assa' ))
		,t2 as (VALUES(1,'assa' ),(2,'assa' ),(3,'assa' ))
		,t3 as (VALUES(1,'assa' ),(2,'assa' ),(3,'assa' ))
	select * from t3;
END
$BODY$
LANGUAGE plpgsql;

SELECT * FROM get_all_foo();


Никак не хочет возвращать результат хотя все что внутри тела функции без нее мне выдает результат. Типы в " RETURNS table foo(.......)" соответствуют возвращаемой таблице. Что я делаю не так с этим оператором WITH?всё не так
...
Рейтинг: 0 / 0
Оператор With в функции
    #39157284
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS а то, что вы вероятно хотели -- это т.н. табличная переменная, было бы (если было бы возможно) как-то так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE
        .......
        t_3 TABLE [(a int ,b text)];
                        --описатель типа опционально, от возможности реализации
BEGIN
        .......
        t_3:= (SELECT ... FROM ....);
        .......
        return query SELECT * FROM t_3;
END;


но табличные переменные в plpgsql не реализованы. в нем только типы, известные в sql. А в sql нет табличных типов.
...
Рейтинг: 0 / 0
Оператор With в функции
    #39157376
kolts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вы написали так более логично и скорей всего правильно, спасибо. Логику понял.
Функция потому в ней не только этот один запрос, а еще добавится несколько и еще пару условий и один цикл :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оператор With в функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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