Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / вызов функции / 10 сообщений из 10, страница 1 из 1
02.06.2008, 10:59
    #35348433
Guest11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов функции
Добрый день.

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

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

?


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
02.06.2008, 13:07
    #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
02.06.2008, 13:22
    #35348851
SeniorAndre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов функции
Так и не понял чего хотел?
...
Рейтинг: 0 / 0
02.06.2008, 13:23
    #35348857
SeniorAndre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов функции
Так и не понял чего хотел?
...
Рейтинг: 0 / 0
02.06.2008, 13:36
    #35348903
Guest11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов функции
SeniorAndreТак и не понял чего хотел?
а хотелось что бы примерно так:
Код: plaintext
1.
select *, func(id) from data;

:)
...
Рейтинг: 0 / 0
02.06.2008, 15:13
    #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
02.06.2008, 15:21
    #35349208
Guest11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов функции
Ёшс language sql работает




Задача вызвать в запросе именно func
реально функция значительно сложнее.
...
Рейтинг: 0 / 0
02.06.2008, 15:59
    #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
03.06.2008, 10:04
    #35350469
Guest11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов функции
Ёш


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


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