powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / NULL in the ARGUMENT
32 сообщений из 32, показаны все 2 страниц
NULL in the ARGUMENT
    #35552659
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаем на РВ 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
NULL in the ARGUMENT
    #35552676
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что для вас "работает нормально" ? Если "Подавая" NULL вы хотите видеть все строки набора, то надо везде написать
WHERE name is null OR name = :as_name
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552688
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRЧто для вас "работает нормально" ? Если "Подавая" NULL вы хотите видеть все строки набора, то надо везде написать
WHERE name is null OR name = :as_name
"Нормально" - значит правильно. Т.е. если as_name = "Вася", то нужно получить все строки, где имя равно "Вася". Если посылаем NULL, то нужно получить все строки, где name = null
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552698
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska пишет:

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

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

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

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

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

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

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

Coding to the bug тем и плох, что кусает без предупреждения ;).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552739
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRне знаю - поддерживает ли ваш сервер такое - можно написать
WHERE field = isNull(:as_arg, field) - ваще бомба :)
Даже если и поддерживает, то это не то, что нужно.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552745
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На самом деле - проблема была тогда, еще в 6.5. Концептуально. Наконец, в 10.5 они сделали поведение более правильным, как бы дебильным оно вам не сейчас не казалось.
пробуйте isNull(:as_arg, field) или field is null or field = :as_arg - это то, что Вам надо.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552752
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
упс.. сорри, вижу..
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552767
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRisNull(:as_arg, field) или field is null or field = :as_arg - это то, что Вам надо.
Да не надо! Если as_name = "Вася", то нужно получить только строки, где имя равно "Вася". А в Вашем примере будут получены и NULL значения.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552772
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Null в retrieval arguments не передается.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552775
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552783
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
ну, а тип какой у него будет?
значит запрос будет искать все записи имя которых "Null" но не Null
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552792
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Придется по видимому писать CASE.
Или (но это тупо) добавить в конец запроса
...and :as_arg is not null and field = :as_arg
union
select
... повторить запрос, но с
...and :as_arg is null
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552813
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
NULL in the ARGUMENT
    #35552818
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, вот так)
if :as_arg = "null" then.....
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552821
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
NULL in the ARGUMENT
    #35552824
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О как, если впадло CASE. Похож на ваш, вначале топика, но со скобками
and ((field is null and :as_arg is null) or (:as_arg is not null and field = :as_arg))
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552827
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сашук, какой ИФ - то ж ЭсКьюЭль запрос в датавинде :)
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552830
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRО как, если впадло CASE. Похож на ваш, вначале топика, но со скобками
and ((field is null and :as_arg is null) or (:as_arg is not null and field = :as_arg))
извращение))) но то что нуна))
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552831
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaRСашук, какой ИФ - то ж ЭсКьюЭль запрос в датавинде :)
пишеться иф в дв... без проблем
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552838
SasaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Земляк
Как ? типа
"go
if тыры пыры select тряляля else select трулюлю
go
" ?
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35552858
Sashuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SasaR2 Земляк
Как ? типа
"go
if тыры пыры select тряляля else select трулюлю
go
" ?
(ну а case как Вы собирались там писать))
да только еще then и endif....
что-то типа...

SELECT поле,

(if :аргумент = 1 then

(SELECT ..
FROM ..
WHERE ..

else
0
endif
)
as tabl
FROM ...
WHERE ...
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35553014
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
И как это в profiler'e выглядит?
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35553387
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Riska Локшин МаркNull в retrieval arguments не передается.
передается в виде переменной.
И как это в profiler'e выглядит?
Мне нужно из скрипта передавать переменные. Profiler здесь ни при чем.
Еще раз повторюсь. В 6.5 проблем не было. Может быть есть какая-то фишка в ini-файле или еще где, чтобы DW отрабатывал NULL значения в старом виде: field_name = :as_mmm (где as_mmm может быть NULL).
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35553780
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RiskaМне нужно из скрипта передавать переменные. Profiler здесь ни при чем.

Profiler это инструмент для отладки приложений и он здесь причем. Какой запрос PB отправляет на сервер когда в retrieval argument's стоим null?
...
Рейтинг: 0 / 0
NULL in the ARGUMENT
    #35553867
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк RiskaМне нужно из скрипта передавать переменные. Profiler здесь ни при чем.

Profiler это инструмент для отладки приложений и он здесь причем. Какой запрос PB отправляет на сервер когда в retrieval argument's стоим null?
Код: plaintext
... WHERE name = NULL
Получил ответ из Сайбеса. Сказали, что в 6.5 был баг (можно было писать "name = NULL"). В 10.5 его исправили...
Сейчас отправлю им благодарность за исправление столь злостного бага и начну переписывать все DW, где в аргументах возможна передача NULLа.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / NULL in the ARGUMENT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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