Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Data type unknown / 13 сообщений из 13, страница 1 из 1
22.07.2005, 18:37:32
    #33180845
transdim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Необходимо сделать проверку по принципу "или они равны или оба Null".
Вот тестовые данные:

Код: plaintext
1.
2.
3.
create table test(a integer)
insert into test values( 10 )
insert into test values(Null)

Проверка выглядит так:

Код: plaintext
1.
2.
3.
select * from test t
 where t.a = :a
    or (t.a is null and :a is null)

Выдаёт ошибку:

Код: plaintext
1.
2.
3.
4.
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = - 804 .
Data type unknown.

Как надо построить запрос, чтобы реализовать эту проверку?
...
Рейтинг: 0 / 0
22.07.2005, 19:08:04
    #33180899
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Код: plaintext
1.
where coalesce(t.a, 0 ) = coalesce(:a, 0 )
...
Рейтинг: 0 / 0
22.07.2005, 19:19:32
    #33180912
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Привет, Лентяй!
Ты пишешь:

Лентяй Л> where coalesce(t.a,0) = coalesce(:a,0)
Не, ему не это.
Ему надо:
(параметр NULL и поле NULL) OR (параметр = поле)

Это если я правильно понимаю невнятное бормотание...

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
22.07.2005, 19:34:24
    #33180928
Amris Mirddin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Сообразим на троих? Имхо оно хочет чтоп параметр в сравнении с нуллом явно к какому-то типу прикастили. Нуллы, они, видать, тож разные бывают
...
Рейтинг: 0 / 0
25.07.2005, 08:55:17
    #33181898
transdim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Вот это не работает:

Лентяйwhere coalesce(t.a,0) = coalesce(:a,0)


наверное потому что у меня InterBase 6.1

Я решил проблему при помощи дополнительной хранимой процедуры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE CHECK_NULL (TEST_VALUE VARCHAR( 255 ))
RETURNS (RESULT VARCHAR( 255 )) AS
begin
  if (TEST_VALUE is Null) then
    Result = 'NULL';
  Else
    Result = TEST_VALUE;
  suspend;  
end

А сама проверка стала выглядить так:

Код: plaintext
1.
2.
3.
4.
select *
  from test t
 where Exists(Select  1  From CHECK_NULL(t.a) V1, CHECK_NULL(:t) V2
               Where V1.result = V2.result)
...
Рейтинг: 0 / 0
25.07.2005, 09:40:45
    #33181949
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
transdimВот это не работает:

Лентяйwhere coalesce(t.a,0) = coalesce(:a,0)


наверное потому что у меня InterBase 6.1


Прими мои соболезнования.
...
Рейтинг: 0 / 0
25.07.2005, 10:50:09
    #33182081
Johnmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
transdim

Твой запрос нормальный в целом.
А вот проблема твоя из-за параметра. А точнее - двух параметров, :a и :a.
Ведь их именно два (!) с "т.з. приложения".
...
Рейтинг: 0 / 0
25.07.2005, 12:11:45
    #33182297
transdim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Johnmen
А вот проблема твоя из-за параметра. А точнее - двух параметров, :a и :a.
Ведь их именно два (!) с "т.з. приложения"


Да, я понимаю что сервер не может понять тип параметра.
...
Рейтинг: 0 / 0
25.07.2005, 12:14:01
    #33182306
Dayroon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Нет. Два одноименных параметра - это два разных параметра.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
25.07.2005, 14:01:23
    #33182623
transdim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
DayroonНет. Два одноименных параметра - это два разных параметра.


Если параметры назвать по разному, то ошибка отсаётся такой-же.
...
Рейтинг: 0 / 0
25.07.2005, 15:14:49
    #33182920
vovan1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
А может на клиенте это все дело анализировать:) И в зависимости от этого писать тот или иной селект.
Код: plaintext
1.
2.
3.
if VarIsNull(Param)
then Query.SQL.Text := 'select * from test t where (t.a is null)'
else Query.SQL.Text := 'select * from test t where t.a = :a and (t.a is not null)';
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.08.2013, 17:03:45
    #38375027
jugeen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
select * from test t
where t.a = cast(:a as TYPE) or (t.a is null and cast(:a as OTHER_TYPE) is null)
...
Рейтинг: 0 / 0
22.08.2013, 17:05:35
    #38375036
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Data type unknown
Эт как жеж мы не догадались за все это время ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Data type unknown / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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