Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Heimdallr
- Сообщения: 6
- Зарегистрирован: 03 авг 2005, 09:28
Сообщение
Heimdallr » 29 авг 2007, 07:59
Добрый день. Хочу поделиться фичей, которую недавно открыл для себя.
В ХП часто видел (и сам писал) последовательность кода типа:
caption=null;
select c.caption from catalog c where c.id=:id into :caption;
if(caption is null) then caption='unknown';
Вместо этого можно написать:
select coalesce(c.caption, 'unknown') from catalog c
right join rdb$database on c.id=:id
into :catalog;
Прошу прощения за отнятое время у тех, для кого подобный трюк
самоочевиден, но для кого-то из новичков этот прием может оказаться
полезным. И особенно будут полезны последующие комментарии гуру.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 29 авг 2007, 11:19
конечно последуют. а если в базе есть запись, где caption is null ?
и вообще, imho на coalesce оргазмируют обычно те, кто с null или запутался или непродумал структуру БД.
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 29 авг 2007, 12:00
Код: Выделить всё
caption = 'unknown';
select caption from catalog where id=:id and caption is not null into caption;
-
Heimdallr
- Сообщения: 6
- Зарегистрирован: 03 авг 2005, 09:28
Сообщение
Heimdallr » 29 авг 2007, 12:28
Если есть запись с caption is null, то и получим тот же 'unknown', так ведь? Это может быть правильным или нет, в зависимости от контекста.
А еще оргазмировать на coalesce приходится тем, кому нужно продолжать развитие проекта сколько-нибудь значительного размера.
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 29 авг 2007, 12:32
Heimdallr писал(а):А еще оргазмировать на coalesce приходится тем, кому нужно продолжать развитие проекта сколько-нибудь значительного размера.
Ещё ни разу не использовал.
Проектами мерятся не будем?

Хотя, конечно, функция нужная, иногда.