powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 2.5. и оператор Case
16 сообщений из 16, страница 1 из 1
Firebird 2.5. и оператор Case
    #38981799
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, привет и доброе утро!
Раньше стоял у меня сервер FB 2.0 и писал я запросы вида:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
id
from spisok
where 
case when :fio<>'' then 
      case when spisok.fio CONTAINING :fio then 1
      else 0
       end
  else 1 
  end=1



Все отлично работало: если параметр не заполнен - то отображались все записи, заполнен - ищется вхождение.
Но, как только мы перешли на 2.5, SQL менеджер по-другому реагирует на данный запрос и при запуске просит ввести аж Два параметра :Fio, по одному на каждое упоминание в тексте запроса. В FB 2.0 такого, не было. Скажите, можно ли это как-то победить? Спасибо.
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981804
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_beginSQL менеджер
Это кто?
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981812
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

любой теперь так реагирует и EMS Sql Manager, и IBExpert
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981816
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_beginи IBExpert
Нормально парсит параметры, запрашивает один раз.

Код: sql
1.
select * from problems  where :param=1 and :param = 1
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981819
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

а при попытке указать значение выкидывает arithmetic exception, numeric overflow, or string truncation.
string right truncation.

Тут дело в том, что один параметр из двух получает тип varchar(0).
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981825
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_begin, для начала стоит заметить, что это никак не относится к версии FB и что эксперт нормально парсит запрос.
Может стоит обновить эксперта?
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981834
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

IBExpert может и показывает один параметр, но при это выдает ошибку, также как и впоследствии IB-компоненты в Delphi именно на сервере 2.5
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981835
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_beginТут дело в том, что один параметр из двух получает тип varchar(0).кастуй явно.
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981836
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_beginIBExpert может и показывает один параметр, но при это выдает ошибку, также как и впоследствии IB-компоненты в Delphi именно на сервере 2.5
Бомби фактами: версия ibe, delphi, fb и главное текст ошибки.
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981840
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

Версия IBE - 2015.4.7.1
Delphi - 7
FB - 2.5.4

Запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
*
from spisok
where 
case when :fio<>'' then
  case when spisok.fio CONTAINING :fio then 1
  else 0
  end
  else 1 
  end=1


Текст ошибки

Incompatible column/host variable data type.
Dynamic SQL Error.
SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.


Спасибо
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981849
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу воспроизвести, работает без проблем. fio в таблице какого типа?
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981851
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphi_begin,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select 
  *
from spisok
where 
  case when CAST(:fio AS VARCHAR(63))<>'' 
    then case when spisok.fio CONTAINING CAST(:fio AS VARCHAR(63))
                  then 1
                  else 0
           end
    else 1 
  end = 1



не нравится 63 поставь другой размер. А вообще условие слишком усложнённое

достаточно было

Код: sql
1.
spisok.fio CONTAINING COALESCE(NULLIF(:fio, ''), spisok.fio)
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981853
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

пока ждал помощи, уже сам попробовал и получилось, спасибо. Про COALESCE не слышал, попробую. Спасибо!
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981863
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисне нравится 63 поставь другой размер. А вообще условие слишком усложнённое
А у меня-то почему работает без этих выкрутасов с кастом?
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38981896
delphi_begin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

Ты святой)
...
Рейтинг: 0 / 0
Firebird 2.5. и оператор Case
    #38982144
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
wadmanСимонов Денисне нравится 63 поставь другой размер. А вообще условие слишком усложнённое
А у меня-то почему работает без этих выкрутасов с кастом?
У вас баг, должно не работать, ищите почему работает :)
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Firebird 2.5. и оператор Case
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]