powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / вызов функции
10 сообщений из 10, страница 1 из 1
вызов функции
    #35348433
Guest11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Есть функция с одним входным параметром, возращает SETOF . (например SETOF INT)
Можно ли в запросе (не используя ХП) подставить в качестве входного параметра поле таблицы?
(Если бы функция возращала одно значение, то вопросов бы не было)

Спасибо
...
Рейтинг: 0 / 0
вызов функции
    #35348513
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так например не работает разве:
Код: plaintext
select *, func(id) from data;

?


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
вызов функции
    #35348810
Guest11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёша так например не работает разве:
Код: plaintext
select *, func(id) from data;

?


Нет

Например:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE OR REPLACE FUNCTION func(v integer)
  RETURNS SETOF integer AS
$BODY$
DECLARE
	i	INTEGER;
	result	INTEGER;
BEGIN
	result :=  1 ;
	FOR i IN  1 .. 3  LOOP
		result := result * V;
		RETURN NEXT result;
	END LOOP;
	RETURN;
END;	
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE;


CREATE TABLE data (ID INTEGER);

INSERT INTO data VALUES ( 1 );
INSERT INTO data VALUES ( 2 );
INSERT INTO data VALUES ( 3 );

Так работает:
Код: plaintext
1.
SELECT * FROM func( 2 )
А так нет
Код: plaintext
1.
select *, func(id) from data;
удаляем
Код: plaintext
1.
2.
DROP FUNCTION func (INTEGER);
DROP TABLE data;
...
Рейтинг: 0 / 0
вызов функции
    #35348851
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не понял чего хотел?
...
Рейтинг: 0 / 0
вызов функции
    #35348857
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не понял чего хотел?
...
Рейтинг: 0 / 0
вызов функции
    #35348903
Guest11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeniorAndreТак и не понял чего хотел?
а хотелось что бы примерно так:
Код: plaintext
1.
select *, func(id) from data;

:)
...
Рейтинг: 0 / 0
вызов функции
    #35349189
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с language sql работает, в принципе наверное понятно почему, но незнаю - это фича или бага %)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
seb=> create or replace function func2(a int) returns setof int language sql as $$
select $ 1  *  1  union all select $ 1  * $ 1  union all select $ 1  * $ 1  * $ 1 ;
$$;
CREATE FUNCTION
seb=> select *, func2(id) from data;
 id | func2
----+-------
   1  |      1 
   1  |      1 
   1  |      1 
   2  |      2 
   2  |      4 
   2  |      8 
   3  |      3 
   3  |      9 
   3  |     27 
( 9  rows)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
вызов функции
    #35349208
Guest11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшс language sql работает




Задача вызвать в запросе именно func
реально функция значительно сложнее.
...
Рейтинг: 0 / 0
вызов функции
    #35349375
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest11 Ёшс language sql работает




Задача вызвать в запросе именно func
реально функция значительно сложнее.ну эээээ вот так, вызов func на plpgsql через func_prox на sql:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
seb=> create or replace function func_prox(a int) returns setof int language sql as $$
select * from func($ 1 );
$$ immutable returns null on null input;
CREATE FUNCTION
seb=> select *, func_prox(id) from data;
 id | func_prox
----+-----------
   1  |          1 
   1  |          1 
   1  |          1 
   2  |          2 
   2  |          4 
   2  |          8 
   3  |          3 
   3  |          9 
   3  |         27 
( 9  rows)
...
Рейтинг: 0 / 0
вызов функции
    #35350469
Guest11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш


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


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