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

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

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

Cache for Windows (x86-32) 2009.1 (Build 446) Thu Jul 9 2009 17:01:44 EDT
...
Рейтинг: 0 / 0
27.02.2010, 11:46
    #36491801
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
1. не записывать туда это значение (подразумеваю что это проблема веб-сервисов и Cache Object Binding Wizard, может быть еще и dataControler), при открытии объекта на COS и записи в свойство "", такого эффекта не наблюдается
2. в классах в свойствах по умолчанию прописывать, то что нужно
...
Рейтинг: 0 / 0
27.02.2010, 11:53
    #36491814
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Проблема в том, что сейчас основной сервер на каше 5.2, а там во многих местах обработка NULL и пусто, в каше 5.2 она одинаковая. А вот при апгрейде до 2009 получаются проблемы.
...
Рейтинг: 0 / 0
27.02.2010, 11:58
    #36491823
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
у нас в одном из проектов переодически запускали программу, которая все $c(0) заменяла на пусто
...
Рейтинг: 0 / 0
27.02.2010, 12:00
    #36491829
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Хм, там сотни две таблиц и как минимум 300 Гб данных.
Не вариант.
...
Рейтинг: 0 / 0
01.03.2010, 08:00
    #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
01.03.2010, 09:02
    #36493853
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Turk
Код: plaintext
select * from <table> where (<text_field> = '')

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

Сильно сомневаюсь что этим запросом хоть что-то выберется...
Зря сомневаетесь. Все запросы рабочие.
...
Рейтинг: 0 / 0
01.03.2010, 12:45
    #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
01.03.2010, 12:49
    #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
01.03.2010, 13:06
    #36494571
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
krvsa, все правильно, т.к.
Код: plaintext
 Cache           SQL 
Код: plaintext
""              NULL
Код: plaintext
$c(0)           ''
...
Рейтинг: 0 / 0
01.03.2010, 13:15
    #36494619
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Вона че! Все понял, спасибо.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
02.03.2010, 02:18
    #36495985
Socratdv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Два варианта SQL можно обработать одним запросом:
select * from <table> where (ISNULL(<text_field>,'') = '')
...
Рейтинг: 0 / 0
02.03.2010, 07:04
    #36496050
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Стоп, но вель раньше то работало по другому.
И вопрос стоит именно в совместимости старых и новых программ и данных.
...
Рейтинг: 0 / 0
02.03.2010, 08:15
    #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
27.04.2010, 12:01
    #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
27.04.2010, 12:16
    #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
27.04.2010, 12:21
    #36600357
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Последняя фраза относилась к тому, что в каше 5.2 не отмечали проблем с null, а в 2009 они вроде как начались.

Буду делать вместо пустых строк строки с проблелом :-(
...
Рейтинг: 0 / 0
27.04.2010, 12:39
    #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
27.04.2010, 19:17
    #36601535
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
Хм, спасибо, но все равно как-то странно, что для insert и update одни правила обработки null, а для select другие.

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

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

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

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

servit,
тогда в случае запроса
where val=:val
оно превращается в
where val=null
который в принципе некорректен и ничего не возвращает. Я правильно понимаю?
...
Рейтинг: 0 / 0
28.04.2010, 11:53
    #36602538
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка <пусто> в каше
картинка не прикрепилась
...
Рейтинг: 0 / 0
28.04.2010, 13:03
    #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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Обработка <пусто> в каше / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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