Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / NULL in the ARGUMENT / 25 сообщений из 32, страница 1 из 2
22.09.2008, 17:04
    #35552659
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Работаем на РВ 10.5 + MSSQL 2005.
После перехода с 6.5 на 10.5 возникли проблемы в DW при передачe NULL параметров.
Например, в DW есть аргумент as_name. В Selecte написано:
Код: plaintext
... WHERE name = :as_name.
При as_name = null в 6.5 все работает нормально. А в 10.5 oшибку не выдает, но результат всегда 0 строк.
Если написать
Код: plaintext
WHERE name is null 
вместо WHERE name = :as_name, то работает нормально. Но написать "WHERE name is :as_name" нельзя.
В таком виде:
Код: plaintext
WHERE name is null AND :as_name is null OR name = :as_name
- результат опять 0 строк. Хотя этот же запрос в 6.5 и в самом MSSQL2005 выдает нужные строки.
Кто сталкивался, как бороться?
Есть какие-нибудь предложения, кроме как добавить во все DW выражения CASE ... WHEN...
...
Рейтинг: 0 / 0
22.09.2008, 17:10
    #35552676
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Что для вас "работает нормально" ? Если "Подавая" NULL вы хотите видеть все строки набора, то надо везде написать
WHERE name is null OR name = :as_name
...
Рейтинг: 0 / 0
22.09.2008, 17:17
    #35552688
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
SasaRЧто для вас "работает нормально" ? Если "Подавая" NULL вы хотите видеть все строки набора, то надо везде написать
WHERE name is null OR name = :as_name
"Нормально" - значит правильно. Т.е. если as_name = "Вася", то нужно получить все строки, где имя равно "Вася". Если посылаем NULL, то нужно получить все строки, где name = null
...
Рейтинг: 0 / 0
22.09.2008, 17:19
    #35552698
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Riska пишет:

> получить все строки, где name = null

Извиняюсь за банальность, но сравнение на равенство/неравенство к Null
вообще неприменимо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.09.2008, 17:20
    #35552701
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Dim2000
Riska пишет:

> получить все строки, где name = null

Извиняюсь за банальность, но сравнение на равенство/неравенство к Null
вообще неприменимо.
Posted via ActualForum NNTP Server 1.4
скорее всего нул передается как стринг
...
Рейтинг: 0 / 0
22.09.2008, 17:22
    #35552707
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
спор не по существу - уверен в SQL - ANSI стандарте написано, что с null значениями надо оперировать как is null / is not null. Приколы типа = null / <> null - от лукавого и ВСЕГДА гарантируют вам разнообразное поведение не только на разных серверах БД, но, иногда, даже в пределах одной линейки. С чем вы в принципе и столкнулись
...
Рейтинг: 0 / 0
22.09.2008, 17:25
    #35552715
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
напишите простой ИФ или же чем вас СВИШЧ не устраивает?
...
Рейтинг: 0 / 0
22.09.2008, 17:26
    #35552721
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
не знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
...
Рейтинг: 0 / 0
22.09.2008, 17:28
    #35552725
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
SasaRне знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
Это типа coalesce() ?
...
Рейтинг: 0 / 0
22.09.2008, 17:29
    #35552729
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Dim2000
Riska пишет:

> получить все строки, где name = null

Извиняюсь за банальность, но сравнение на равенство/неравенство к Null
вообще неприменимо.
Posted via ActualForum NNTP Server 1.4
в 6.5
Код: plaintext
name = :as_name
работает без проблем. Проблема возникла в 10.5
...
Рейтинг: 0 / 0
22.09.2008, 17:32
    #35552738
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Riska пишет:

> в 6.5 name = :as_name работает без проблем

Coding to the bug тем и плох, что кусает без предупреждения ;).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.09.2008, 17:33
    #35552739
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
SasaRне знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
Даже если и поддерживает, то это не то, что нужно.
...
Рейтинг: 0 / 0
22.09.2008, 17:35
    #35552745
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
На самом деле - проблема была тогда, еще в 6.5. Концептуально. Наконец, в 10.5 они сделали поведение более правильным, как бы дебильным оно вам не сейчас не казалось.
пробуйте isNull(:as_arg, field) или field is null or field = :as_arg - это то, что Вам надо.
...
Рейтинг: 0 / 0
22.09.2008, 17:37
    #35552752
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
упс.. сорри, вижу..
...
Рейтинг: 0 / 0
22.09.2008, 17:40
    #35552767
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
SasaRisNull(:as_arg, field) или field is null or field = :as_arg - это то, что Вам надо.
Да не надо! Если as_name = "Вася", то нужно получить только строки, где имя равно "Вася". А в Вашем примере будут получены и NULL значения.
...
Рейтинг: 0 / 0
22.09.2008, 17:41
    #35552772
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Null в retrieval arguments не передается.
...
Рейтинг: 0 / 0
22.09.2008, 17:42
    #35552775
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
...
Рейтинг: 0 / 0
22.09.2008, 17:45
    #35552783
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
ну, а тип какой у него будет?
значит запрос будет искать все записи имя которых "Null" но не Null
...
Рейтинг: 0 / 0
22.09.2008, 17:49
    #35552792
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Придется по видимому писать CASE.
Или (но это тупо) добавить в конец запроса
...and :as_arg is not null and field = :as_arg
union
select
... повторить запрос, но с
...and :as_arg is null
...
Рейтинг: 0 / 0
22.09.2008, 17:55
    #35552813
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
SasaRПридется по видимому писать CASE.
Или (но это тупо) добавить в конец запроса
...and :as_arg is not null and field = :as_arg
union
select
... повторить запрос, но с
...and :as_arg is null
а почему не так?
if field = "null" then
field is null
else
field = :as_arg
end if
...
Рейтинг: 0 / 0
22.09.2008, 17:57
    #35552818
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
сорри, вот так)
if :as_arg = "null" then.....
...
Рейтинг: 0 / 0
22.09.2008, 17:57
    #35552821
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Sashuk Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
ну, а тип какой у него будет?
значит запрос будет искать все записи имя которых "Null" но не Null
Код: plaintext
1.
2.
3.
4.
string ls_name
ls_name = 'Vasya'
dw_1.Retrieve(ls_name)
SetNull(ls_name)
dw_1.Retrieve(ls_name)
...
Рейтинг: 0 / 0
22.09.2008, 18:00
    #35552824
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
О как, если впадло CASE. Похож на ваш, вначале топика, но со скобками
and ((field is null and :as_arg is null) or (:as_arg is not null and field = :as_arg))
...
Рейтинг: 0 / 0
22.09.2008, 18:01
    #35552827
SasaR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
Сашук, какой ИФ - то ж ЭсКьюЭль запрос в датавинде :)
...
Рейтинг: 0 / 0
22.09.2008, 18:02
    #35552830
Sashuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL in the ARGUMENT
SasaRО как, если впадло CASE. Похож на ваш, вначале топика, но со скобками
and ((field is null and :as_arg is null) or (:as_arg is not null and field = :as_arg))
извращение))) но то что нуна))
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / NULL in the ARGUMENT / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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