ЧАстые Вопросы и Ответы
Модераторы: kdv, CyberMax
-
Gera
- Сообщения: 53
- Зарегистрирован: 12 мар 2008, 17:34
Сообщение
Gera » 13 мар 2008, 14:39
Подскажите пожалуйста, можно ли в FB 2.0 реализовать свои агрегатные функции.
Например CHAR_SUM - конкатенация всех значений столбца в одну строку
и FIRST_NOT_NULL - первое значение не NULL (аналог COALESCE, но для столбца, а не списка).
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 13 мар 2008, 14:44
Только с помощью хранимой процедуры. Имитировать т.е.
-
Gera
- Сообщения: 53
- Зарегистрирован: 12 мар 2008, 17:34
Сообщение
Gera » 13 мар 2008, 14:58
т.е. если имеется таблица
COMMENT(
ID_Object INT,
MONTH INT,
DAY INT,
TEXT VARCHAR(100))
и по ней необходимо собрать текст всех комментариев за выбранный месяц, по каждому объекту, то нужно делать курсор по объектам, для каждого выполнить ХП и результаты каждого вызова собрать во временной таблице?
-
stix-s
- Заслуженный разработчик
- Сообщения: 557
- Зарегистрирован: 13 дек 2005, 11:52
Сообщение
stix-s » 13 мар 2008, 15:29
Gera писал(а):
и по ней необходимо собрать текст всех комментариев за выбранный месяц, по каждому объекту,
что значит собрать? в одну сплошную строку чтоли?
-
Gera
- Сообщения: 53
- Зарегистрирован: 12 мар 2008, 17:34
Сообщение
Gera » 13 мар 2008, 15:35
Gera писал(а):Подскажите пожалуйста, можно ли в FB 2.0 реализовать свои агрегатные функции.
Например CHAR_SUM - конкатенация всех значений столбца в одну строку
Да, именно в одну строку
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 13 мар 2008, 16:12
В FB 2.1 вроде есть функция list.
Хотя, в теме задачи "выбрать все комментарии за месяц", думаю, не проканает. если коммент varchar(100) (кстати, чего так мало), то даже по 1 шт. в сумме уже будет под 3000 символов. А если не один коммент в день, а больше, то ....
-
Gera
- Сообщения: 53
- Зарегистрирован: 12 мар 2008, 17:34
Сообщение
Gera » 13 мар 2008, 16:31
Вообще хочется написать собственную агрегатную функцию и подключить ее к базе, аналогично UDF.
Я не знаю можно ли это в принципе.
Может разработчикам FB написать...
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 13 мар 2008, 17:37
Я не знаю можно ли это в принципе.
нет, это невозможно в принципе. Ни в IB ни в FB. И пока вроде как не планируется.
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 13 мар 2008, 18:46
Собственно, и нафиг не нужно, потому как взяв курсор FOR SELECT за нужный конец, делается всё что душа поэта возжелает.
-
Gera
- Сообщения: 53
- Зарегистрирован: 12 мар 2008, 17:34
Сообщение
Gera » 14 мар 2008, 08:42
Всем спасибо.
Считаю что тему можно закрыть.
-
Gera
- Сообщения: 53
- Зарегистрирован: 12 мар 2008, 17:34
Сообщение
Gera » 26 мар 2008, 08:33
Свершилось!
в FireBird v2.1 есть новая агрегатная функция LIST
подробности здесь
Она возвращает конкатенацию строкового представления группы, с разделителями (по желанию)
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 26 мар 2008, 10:01
я тебе про нее (list) уже писал.