Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 coalesce and boolean  [new]
alekcvp
Member

Откуда:
Сообщений: 2181
Вопрос: это нормально что нижеследующий запрос возвращает NULL?..

Firebird 3
select coalesce(blocked, true) from managers where login = current_user

И этот тоже:
select iif(blocked is null, true, blocked) from managers where login = current_user


И как мне тогда вернуть значение TRUE в случае отсутствия записи?..

Сообщение было отредактировано: 22 июн 20, 12:33
22 июн 20, 12:33    [22155074]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
hvlad
Member

Откуда:
Сообщений: 10961
alekcvp,

а может он ничего не возвращает ?
22 июн 20, 12:39    [22155078]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
alekcvp
Member

Откуда:
Сообщений: 2181
hvlad
alekcvp,
а может он ничего не возвращает ?

Хм... логично.
22 июн 20, 12:41    [22155082]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
Polesov
Member

Откуда:
Сообщений: 746
alekcvp
Вопрос: это нормально что нижеследующий запрос возвращает NULL?..

Firebird 3
select coalesce(blocked, true) from managers where login = current_user

И этот тоже:
select iif(blocked is null, true, blocked) from managers where login = current_user


И как мне тогда вернуть значение TRUE в случае отсутствия записи?..

Привет.

select coalesce( ( select blocked from managers where login = current_user ), true ) from rdb$database
22 июн 20, 12:49    [22155088]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
alekcvp
Member

Откуда:
Сообщений: 2181
Polesov

select coalesce( ( select blocked from managers where login = current_user ), true ) from rdb$database

Спасибо, у меня это в процедуре, поэтому я решил просто дальнейшее условие переписать на
if (blocked is distinct from false) then ... 
так работает.

Сообщение было отредактировано: 22 июн 20, 14:13
22 июн 20, 14:15    [22155149]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
Polesov
Member

Откуда:
Сообщений: 746
alekcvp

Спасибо, у меня это в процедуре, поэтому я решил просто дальнейшее условие переписать на
if (blocked is distinct from false) then ... 
так работает.

И какое присвоение после then?
22 июн 20, 17:20    [22155308]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
Vlad F
Member

Откуда:
Сообщений: 1298
alekcvp,

Просто сделай перед suspend (если нужно использование его в процедуре, то сразу после запроса):
blocked = coalesce(blocked, true)))

Сообщение было отредактировано: 22 июн 20, 17:29
22 июн 20, 17:29    [22155315]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10575
alekcvp,

мой вариант

select coalesce(max(blocked), true) from managers where login = current_user
22 июн 20, 17:37    [22155317]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
alekcvp
Member

Откуда:
Сообщений: 2181
Polesov
alekcvp

Спасибо, у меня это в процедуре, поэтому я решил просто дальнейшее условие переписать на
if (blocked is distinct from false) then ... 
так работает.

И какое присвоение после then?

Там exception.
22 июн 20, 18:54    [22155398]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
Polesov
Member

Откуда:
Сообщений: 746
alekcvp
Polesov
пропущено...

И какое присвоение после then?

Там exception.


На мой вкус, было бы нагляднее
  if ( not exists ( select * from managers where login = current_user and blocked = false ) ) then
    exception;
22 июн 20, 19:02    [22155408]     Ответить | Цитировать Сообщить модератору
 Re: coalesce and boolean  [new]
alekcvp
Member

Откуда:
Сообщений: 2181
Polesov,

Там на самом деле условие сложнее и длинные строки с переносами, на мой взгляд, вряд ли сильно нагляднее.
Я просто выкинул всё ненужное для примера.

Сообщение было отредактировано: 22 июн 20, 21:13
22 июн 20, 21:15    [22155469]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить