Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
Исходные данные: есть исходная таблица t, есть sql (или plsql - не суть) функция f с параметрами, результат которой - таблица. Проблема: Нужно пробежаться по таблице t, вызывая для каждой строки функцию f с параметрами - значениями некоторых столбцов из текущей строки -, и получить в итоге одну новую таблицу. Или я туплю, или такое можно написать только функцией на plsql, используя cursor, return next. Хотелось бы sql-запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 12:34 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
http://www.postgresql.org/docs/8.0/interactive/sql-select.html примеры внизу страницы начинающиеся таким текстом This example shows how to use a function in the FROM clause, both with and without a column definition list: так же никто не запрещает во FROM использовать другой SELECT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 12:55 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
Только функцией. Такая штука (т.е. вызов функции на каждую строку с передачей знечений в параметры) имеется по-крайней мере в Sybase ASA (называется LATERAL JOIN), но в постгресе ещё не реализована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 12:57 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
мафиктак же никто не запрещает во FROM использовать другой SELECT это не совсем то, о чём Carrie2 спрашивает. Функцию во FROM получится вызвать только с константными параметрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:02 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
это конечно с точки зрения здравого смысла (в плане использования пример бредовый) но с точки зрения наглядности наверное подойдет Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:26 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
бляха муха хотел просмотреть и запостил не то что надо ... ща подумаем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:28 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
ффффФункцию во FROM получится вызвать только с константными параметрами не совсем так вот Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. up_auth.users содержит > 1 записи правда результат не совсем корректный ;-)) ____f1_____|___f2_____ (7,1,0,0,0) | vfabr (11,0,1,0,0)| mihon obj_permissions_list возвращает SETOF я просто когда-то нечто подобное делал вот немогу найти что :-( и когда ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:53 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
Carrie2Исходные данные: есть исходная таблица t, есть sql (или plsql - не суть) функция f с параметрами, результат которой - таблица. Проблема: Нужно пробежаться по таблице t, вызывая для каждой строки функцию f с параметрами - значениями некоторых столбцов из текущей строки -, и получить в итоге одну новую таблицу. Или я туплю, или такое можно написать только функцией на plsql, используя cursor, return next. Хотелось бы sql-запросом. курсор в "непосредственном" виде наверное не нужен. нужна аналогичная ему конструкция FOR ххх IN SELECT ххх LOOP Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 13:56 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
vfabr Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Разве такое возможно с pl/prsql? Можно, используя функцию на C и perl. Правда видел патч, который может похерить в перле эту классную возможность в угоду устранения дуплицирования набора данных. Это тоже хорошо, но терять уникальную возможность нехочется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 14:50 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
а никто и не писал что это plpgsql $-)) вообщем это sql функция но я думаю можно как нить обойти или сделать это и с plpgsql можно попробовать кстати может посоветовать человеку view ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 15:56 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
Carrie2Исходные данные: есть исходная таблица t, есть sql (или plsql - не суть) функция f с параметрами, результат которой - таблица. Проблема: Нужно пробежаться по таблице t, вызывая для каждой строки функцию f с параметрами - значениями некоторых столбцов из текущей строки -, и получить в итоге одну новую таблицу. Или я туплю, или такое можно написать только функцией на plsql, используя cursor, return next. Хотелось бы sql-запросом. Можно использовать и функцию, и сложный sql запрос. Смотря, какой результат тебе нужен. Возможно, всё это можно сделать и одним запросом без использования функции. Если уточнишь исходные данные, думаю, получишь более вразумительные ответы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 16:46 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
Упрощенный пример. CREATE TABLE t1 (num INT); COPY t1 (num) FROM stdin; 4 1 \. CREATE TABLE t2 (f1 INT, f2 INT, f3 INT); CREATE FUNCTION f1(INT) RETURNS SETOF t2 AS ' SELECT $1*2, $1*4, $1*8 UNION ALL SELECT $1*3, $1*6, $1*9; ' LANGUAGE SQL; Вот такой запрос ес-но не может быть, но какой результат мне от него хотелось бы получить - думаю понятно: select f1(num) FROM t1; Результат что-то вроде: 8 16 32 12 24 36 2 4 8 3 6 9 2vfabr: где тут поможет view? Так же не понимаю во втором вашем примере как удалось функцию up_auth.obj_permissions_list, возвращающую setof, "запихнуть" в SELECT и каким образом получился такой "странный" результат. P.S.: Реализовывать функцией на pl/pgsql пробовал (ес-но используя FOR ххх IN SELECT ххх LOOP ) - очень медленно, на больших объемах данных это заметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 18:23 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
а зачем таблица t2? вообщем если тебе действительно нужен ответ на вопрос что тебе нужно то не поленись написать полный вариант задачи (даже можно наверное без таблиц и запросов) ну например у меня есть входной поток данных таких то на выходе нужно получить то то и это нужно затем то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 20:12 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
и еще версию сервера напиши я все на 8 пробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2005, 20:17 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
Дык чем мой предыдущий пост не пример? "Трансформирую" одну таблицу с помощью функции f1 в другую. В реальной задачи смысл будет точно такой же. В общем LATERAL JOIN из Sybase - это то, что нужно. P.S.: Таблица t2 нужна только чтобы для функции сказать RETURNS SETOF t2. Версия postgres'а - 7.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2005, 07:21 |
|
||
|
Вызов функции, которая возвращает таблицу для каждой строки исходной таблицы
|
|||
|---|---|---|---|
|
#18+
если вы хотите просто найти "лопату" для решения вашей проблемы тогда только могу отослать вас в мануал если хотите спросить совета как подступицца к проблеме тогда говорите то что вам нужно сделать почему входной поток это 1 колонка? может можно его сразу преобразовать в то что надо еще на клиенте, например, который этот самый поток пишет в базу, а может это не поток, а какая-то таблица которую вы не в силах переделать или еще что ... в том что вы привели можно сделать так и я не вижу необходимости делать функцию SELECT t_1.num*2, t_1.num*4, t_1.num*8 FROM t1 AS t_1 UNION ALL SELECT t_2.num*3, t_2.num*6, t_2.num*9 FROM t1 AS t_2 ну зачем это надо я всеравно не пойму ... потом можно обернуть все это дело во вьюху (незнаю правда есть ли они в 7 постгресе и лень смотреть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2005, 12:25 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33133633&tid=2007160]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 450ms |

| 0 / 0 |
