powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Обработка <пусто> в каше
25 сообщений из 33, страница 1 из 2
Обработка <пусто> в каше
    #36491699
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
каше присваевается в текстовое поле set field=''
в глобале лежит $c(0)

при выборке из таблицы в портале показывает <пусто>, при выборке в программах выьранное значение не равно ''

Где можно изменить обработку пустых значений?

Cache for Windows (x86-32) 2009.1 (Build 446) Thu Jul 9 2009 17:01:44 EDT
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36491801
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. не записывать туда это значение (подразумеваю что это проблема веб-сервисов и Cache Object Binding Wizard, может быть еще и dataControler), при открытии объекта на COS и записи в свойство "", такого эффекта не наблюдается
2. в классах в свойствах по умолчанию прописывать, то что нужно
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36491814
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что сейчас основной сервер на каше 5.2, а там во многих местах обработка NULL и пусто, в каше 5.2 она одинаковая. А вот при апгрейде до 2009 получаются проблемы.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36491823
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у нас в одном из проектов переодически запускали программу, которая все $c(0) заменяла на пусто
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36491829
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, там сотни две таблиц и как минимум 300 Гб данных.
Не вариант.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36493816
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
update <table> set <text_field>=''
равносильно
Код: plaintext
set <obj>.<text_field> = $c( 0 )

Код: plaintext
update <table> set <text_field>=NULL
равносильно
Код: plaintext
set <obj>.<text_field> = ""

Код: plaintext
select * from <table> where (<text_field> = '')
равносильно
Код: plaintext
if (<obj>.<text_field> = $c( 0 ))

Код: plaintext
select * from <table> where (<text_field> is NULL)
равносильно
Код: plaintext
if (<obj>.<text_field> = "")
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36493853
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Turk
Код: plaintext
select * from <table> where (<text_field> = '')

Сильно сомневаюсь что этим запросом хоть что-то выберется...
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36494382
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaTurk
Код: plaintext
select * from <table> where (<text_field> = '')

Сильно сомневаюсь что этим запросом хоть что-то выберется...
Зря сомневаетесь. Все запросы рабочие.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36494456
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Turk , пробую у себя... Прямо в портале.

Код: plaintext
1.
2.
3.
4.
5.
select
*
from
zst_DAT.Composition
where
Quantity=''
Записей удовлетворяющих условию - нет

Пробую теперь так

Код: plaintext
1.
2.
3.
4.
5.
select
*
from
zst_DAT.Composition
where
Quantity is null

Записи - есть.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36494475
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверяю что в глобале с данными...

Код: plaintext
^zst.DAT.CompositionD( 41 )=$LB("","9","","22","")

Т.е. в значениях "пусто" ("")...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36494571
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa, все правильно, т.к.
Код: plaintext
 Cache           SQL 
Код: plaintext
""              NULL
Код: plaintext
$c(0)           ''
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36494619
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вона че! Все понял, спасибо.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36495985
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Два варианта SQL можно обработать одним запросом:
select * from <table> where (ISNULL(<text_field>,'') = '')
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36496050
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп, но вель раньше то работало по другому.
И вопрос стоит именно в совместимости старых и новых программ и данных.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36496084
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.Стоп, но вель раньше то работало по другому.
И вопрос стоит именно в совместимости старых и новых программ и данных.
Как в Cache 5.0, так и в Cache 2009.1 обработка одинаковая (введите "null processing" в поиске в документации к обоим версиям и увидите, что описание практически идентичное).
Было лишь 2 исправления:
1) в Cache 5.1 привели в соответствие работу операторов <>, > и >= с работой других операторов (для случаев, когда один из операндов был равен NULL);
2) в Cache 2008.1 функция LogicalToDisplay() для типа %Library.String стала удалять символы $c(0) из результата.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36600282
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Class test.test1 Extends %Persistent
{

Property Val As %String;

ClassMethod Test()
{
 s val=""
 &sql(delete from  test.test1)
 &sql(insert into test.test1 (Val) values(:val))
 
 &sql(select count(*) into :cnt from test.test1 where val=:val)
 w !,"A1=",cnt
 &sql(select count(*) into :cnt from test.test1 where val is null)
 w !,"A2=",cnt
 &sql(select count(*) into :cnt from test.test1 where val="")
 w !,"A3=",cnt
 
 
 &sql(update test.test1 set Val="")
 &sql(select count(*) into :cnt from test.test1 where val=:val)
 w !,"B1=",cnt
 &sql(select count(*) into :cnt from test.test1 where val is null)
 w !,"B2=",cnt
 &sql(select count(*) into :cnt from test.test1 where val="")
 w !,"B3=",cnt

 &sql(update test.test1 set Val = null)
 &sql(select count(*) into :cnt from test.test1 where val=:val)
 w !,"C1=",cnt
 &sql(select count(*) into :cnt from test.test1 where val is null)
 w !,"C2=",cnt
 &sql(select count(*) into :cnt from test.test1 where val="")
 w !,"C3=",cnt
}

}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
USER>d ##class(test.test1).Test()
A1= 0 
A2= 1 
A3= 0 

B1= 0 
B2= 0 
B3= 1 

C1= 0 
C2= 1 
C3= 0 
Где здесь логика?
При этом портал первый и третий случай показывает <пусто>, а второй случай как пустую строку.
Только мне кажется, что программисты IS что-то перепутали?

И как мне в таком случае понять, что находится в данных?
Почему я не могу без извращений прочитать из таблицы то, что я только что туда записал?
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36600329
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понимаю, запустил на каше 5.2
результат тот же
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
A1= 0 
A2= 1 
A3= 0 

B1= 0 
B2= 0 
B3= 1 

C1= 0 
C2= 1 
C3= 0 
То ли я дурак, или в чем еще дело?
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36600357
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последняя фраза относилась к тому, что в каше 5.2 не отмечали проблем с null, а в 2009 они вроде как начались.

Буду делать вместо пустых строк строки с проблелом :-(
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36600427
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код работает верно.

В первом случае Вы сохраняете пустое значение (null) в таблицу. Если нужно сохранить именно пустую строку, то:
Код: plaintext
1.
2.
3.
 s val=$c( 0 )
 &sql(delete from  test.test1)
 &sql(insert into test.test1 (Val) values(:val))

Следующие коды эквивалентны (сохраняют пустое значение):
Код: plaintext
1.
2.
s val=""
&sql(update test.test1 set Val = :val)
Код: plaintext
&sql(update test.test1 set Val = null)

Код:
Код: plaintext
1.
update test.test1 set Val=""
сохраняет пустую строку, а не пустое значение, поскольку в SQL для пустого значения есть соответствующая "константа" - null.

Допустим, Вы хотите сохранить через объектный интерфейс пустую строку и пустое значение. Как Вы поступите?
Код: plaintext
1.
2.
3.
4.
set p=##class(test.test1).%New()
set p.Val="" ;это null
set p.Val=$c( 0 ) ;это ""
do p.%Save()
Документация

PS: изменения в версии 5.1
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36601535
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, спасибо, но все равно как-то странно, что для insert и update одни правила обработки null, а для select другие.

Опять же, портал показывает пустые строки как <пусто>, а null как пустую ячейку.
Мне это не кажется логичным.

Ссылка наверно сюда должна вести.
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36601959
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас запрещено использование insert и update в прикладном коде.
Думаю, Вам бы такой запрет тоже помог. Вопросов бы было значительно меньше ;)
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36602105
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

Caché Monitor показывает null как null , пустую строку как пустую строку. В нём же можно посмотреть план запроса.

PS: для select действуют те же правила, что и для insert/update .
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36602532
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,
Тут весь код прикладной кроме самой каше, вообще-то :-)
У нас тоже инсерты и апдейты находятся в методах класса, чтобы при изменении класса обязательно перекомпиливались. Но непонятно, что это меняет с точки зрения обработки null

servit,
тогда в случае запроса
where val=:val
оно превращается в
where val=null
который в принципе некорректен и ничего не возвращает. Я правильно понимаю?
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36602538
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
картинка не прикрепилась
...
Рейтинг: 0 / 0
Обработка <пусто> в каше
    #36602742
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.тогда в случае запроса
where val=:val
оно превращается в
where val=null
который в принципе некорректен и ничего не возвращает. Я правильно понимаю?

Правильно.

Если Вы хотите использовать универсальное условие по параметру, то это можно сделать, например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
...
ClassMethod Test1()
{
 do ..%KillExtent()
 
 &sql(insert into test.test1 (Val) values(null))
 &sql(insert into test.test1 (Val) values(''))
 &sql(insert into test.test1 (Val) values('test'))
 
 s val=""
 &sql(select %ID into :r from test.test1 where val=:val or (:val is null and val is null))
 w !,"null=",r

 s val=$c( 0 )
 &sql(select %ID into :r from test.test1 where val=:val or (:val is null and val is null))
 w !,"''=",r

 s val="test"
 &sql(select %ID into :r from test.test1 where val=:val or (:val is null and val is null))
 w !,"'test'=",r
}
...

PS: cкриншот не стоило приводить, я Вам верю. Выше речь шла про Caché Monitor .
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Обработка <пусто> в каше
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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