powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / View with parameters
8 сообщений из 8, страница 1 из 1
View with parameters
    #33786722
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT a.field1, b.field2
FROM a, b
WHERE
a.field1 = MyParameter1
AND
b.field1 = MyPar2

как пишется такая вьюшка, если параметры будет передавать клиентское приложение???
...
Рейтинг: 0 / 0
View with parameters
    #33786920
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынц
Идея понятна, дальше в мануал или поиск.
...
Рейтинг: 0 / 0
View with parameters
    #33787353
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkiSELECT a.field1, b.field2
FROM a, b
WHERE
a.field1 = MyParameter1
AND
b.field1 = MyPar2

как пишется такая вьюшка, если параметры будет передавать клиентское приложение???чисто нащет параметрической именно вьюшки, а не хранимки - планирую пока попробывать исхитрицца примерно так: по 2 STABLE ф-ии. на параметр. одна устанавливает переменную сессии, другая - читает. (см поиском про переменные сессии , хотя можно и без них - на полях темп таблички). Тогда при
SELECT * FROM myview
WHERE myfunsetparam('name1',param1,'name2',param2,'name3',param3)

или
myfunsetparam('name1',param1) AND myfunsetparam('name2',param2) AND myfunsetparam('name3',param3)

должно вроде бы сначала установить некие параметры, которые читаюцца во вью
CREATE VIEW ...
SELECT * FROM ...
WHERE myfungetparam("name1") =...
AND myfungetparam("name2") =...
AND myfungetparam("name3") =...

зачем такая бодяга супротив ~~
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE FUNCTION mysetof_fun (param1,param2,param3)
RETURNS SETOF ....
 AS '
SELECT * FROM ...
WHERE param1 =...
AND param2=...
AND param3=...;
' lang SQL
- думаю посмотреть на предмет оптимизации суммарного (включающего такой вью как часть чего-то более сложного) запроса при джойнах и внешних условиях (сдается мне, что хранимка таки сначала выдаст из себя все, а потом уж оптимизатор будет ее результат фильтровать или сворачивать, а со вью _наверное_ можно свернуть (или отфильтровать) сразу с наложением суммарного условия (т.е. допускаю, что оптимизатор сумеет "раскрыть" вью на предмет внешней фильтрации скажем по индексу до выполнения) - не уверен - надо тестить).
...
Рейтинг: 0 / 0
View with parameters
    #33791788
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
был бы рад - но такая функция матерится, что должна вернуть только одно значение

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE FUNCTION mysetof_fun (param1,param2,param3)
RETURNS SETOF ....
 AS '
SELECT * FROM ...
WHERE param1 =...
AND param2=...
AND param3=...;
' lang SQL


а если значений целый набор - то как быть???
...
Рейтинг: 0 / 0
View with parameters
    #33792012
SOmni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например, делать на plpgsql
...
Рейтинг: 0 / 0
View with parameters
    #33792347
4321ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOmniнапример, делать на plpgsqlсыршенно не обязательно. Таки надо пралбгл задать сетоф.
...
Рейтинг: 0 / 0
View with parameters
    #33793691
resu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот (упрощенный) пример функции c SETOF (т.е. возвращающей RecordSet).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE TYPE children_list AS
   (id int4,
    menu_name varchar,
    link varchar,
    "level" int2);


CREATE OR REPLACE FUNCTION _list_all_children_for("varchar")
  RETURNS SETOF children_list AS
'
DECLARE
 r		record;
 rr		record;
 v_cl		children_list%ROWTYPE;
 v_cl_2		children_list%ROWTYPE;
BEGIN
 FOR r IN SELECT *, get_hierachy_level( menu_name ) as level FROM mg_menu WHERE parent_id = v_master_id ORDER BY "position"
 LOOP
	v_cl.id = r.id;
	v_cl.menu_name = r.menu_name;
	v_cl.link = r.link;
	v_cl.level = r.level;
	RETURN NEXT v_cl;

 END LOOP;
 RETURN;
END'
...
Рейтинг: 0 / 0
View with parameters
    #33798776
AKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже еще проще, разобрался

просто надо, чтобы функция была а-ла
Create or replace function _test(IN int4, OUT My1 "varchar", OUT y2 "varchar")
AS
......
....
SELECT * FROM ... WHERE id = $1
.......


SELECT * FROM _test(125) ;
возвращает не одно значение а строку из таблицы....
в хэлпе есть такой пример
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / View with parameters
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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