|
|
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
Есть функция: Код: sql 1. 2. 3. 4. 5. Вопрос: эта функция выполниться сколько раз, если значения одинаковые? Код: sql 1. Выполнить запрос Код: sql 1. не всегда получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 13:05:56 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
2й вопрос: Так делется: Код: sql 1. А так не получается сделать: Код: sql 1. Кто объяснит, почему найти сумму нельзя Спасибо всем за ответы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 13:43:11 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
PCContraЕсть функция: Код: sql 1. 2. 3. 4. 5. Вопрос: эта функция выполниться сколько раз, если значения одинаковые? Код: sql 1. Выполнить запрос Код: sql 1. не всегда получается два раза выполняется... ровно столько сколько вы написали... а что значит "не всегда получается вполнить запрос"? PS: а функция у вас собственно сколько строк возвращает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 14:53:42 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
PCContra2й вопрос: Так делется: Код: sql 1. А так не получается сделать: Код: sql 1. Кто объяснит, почему найти сумму нельзя Спасибо всем за ответы! вы бы чтоли ошибку возвращаемую бы приводили...? но 99% что проблема в "RETURNS TABLE" что опять же возвращает к вопросу сколько строк функция возвращает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2014, 14:55:24 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
PCContraЕсть функция: Код: sql 1. 2. 3. 4. 5. Вопрос: эта функция выполниться сколько раз, если значения одинаковые? Зависит от... Если IMMUTABLE, то может и один.PCContraВыполнить запрос Код: sql 1. не всегда получаетсяА это неправда. Код: sql 1. Короче всегда можно обернуть еще раз SELECT'ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:21:06 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
PCContraВопрос: эта функция выполниться сколько раз, если значения одинаковые? Код: sql 1. Если я правильно понял и x, y - поля таблицы, то функция выполнится два раза для каждой строки из таблицы "table". Что бы избежать двойного выполнения функции можно воспользоваться конструкцией lateral , которая появилась в 9.3: Код: sql 1. 2. 3. lateral вообще очень интересная вещь т.к. позволяет не только вызывать функции, но и выполнять подзапросы, подробней здесь PCContraА так не получается сделать: Код: sql 1. конечно не получится, агрегатные функции принимают в качестве аргумента значение, а вы пытаетесь передать ей набор значений Код: sql 1. PS immutable конечно помогает, но иногда планировщик все равно решает выполнить ф-ию два раза, поэтому лучше использовать lateral ведь его именно для этого и придумали ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 12:48:05 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
1) Maxim BogukPCContra2й вопрос: Так делется: Код: sql 1. А так не получается сделать: Код: sql 1. Кто объяснит, почему найти сумму нельзя Спасибо всем за ответы! вы бы чтоли ошибку возвращаемую бы приводили...? но 99% что проблема в "RETURNS TABLE" что опять же возвращает к вопросу сколько строк функция возвращает... Ошибка SQL: ERROR: set-valued function called in context that cannot accept a set В операторе: SELECT SUM((public.tail(x, y)).p) FROM table 2) Да, таблица "table" содержит колонки x, y 3) Maxim BogukPS: а функция у вас собственно сколько строк возвращает? ровно одну строку. В данном случае функция возвращает столько строк ( как Вы уже поняли) сколько строк в "table" 4) AndreiSQL конечно не получится, агрегатные функции принимают в качестве аргумента значение, а вы пытаетесь передать ей набор значенийА на мой взгляд я передаю ей 1 конкретное значение -(public.tail(x, y)) .p 5) lateral. Боюсь я новинок. С багами, небось... 6) Warstone Короче всегда можно обернуть еще раз SELECT'ом. Так и сделал, почти: WITH t() AS (SELECT ... ) SELECT ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 19:33:20 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
PCContra<> 4) AndreiSQL конечно не получится, агрегатные функции принимают в качестве аргумента значение, а вы пытаетесь передать ей набор значенийА на мой взгляд я передаю ей 1 конкретное значение -(public.tail(x, y)) .p <>гм, что происходит на ваш взгляд - совершенно неважно, за его (взгляда) полной неадекватностью. дело не в поле, а в объявлении ф-ии. чтобы постгресс считал, что вы возвращаете 1 запись, а не набор, вам RETURNS TABLE (....) который эквивалентен RETURNS SETOF RECORD заменить на RETURNS RECORD. понятно, что удобного синтаксиса[RETURNS RECORD (a int , b text)], как в случае с RETURNS TABLE вам не предоставят (как и return query внутри), ну так через out параметры опишете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 20:13:51 |
|
||
|
Сколько раз выполняется функция?
|
|||
|---|---|---|---|
|
#18+
PCContra, авторровно одну строку. RETURNS TABLE это не одна строка... это набор из N строк (таблица) которая у вас случайно N=1. Если функция возвращает 1 строку ее не надо как RETURNS TABLE обьявлять никогда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 01:28:28 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=1998899]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
194ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 504ms |

| 0 / 0 |
