-
Если пример
[23] дополнить:
я@ora10> create unique index yyy on xxx(a);
Index created.
я@ora10> select * from xxx order by a;
A
----------
1
2
3
4
я@ora10> insert into xxx values(NULL);
1 row created.
я@ora10> select * from xxx order by a;
A
----------
1
2
3
4
6 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 4016984797
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6 | 78 | 4 (25)| 00:00:01 |
| 1 | SORT ORDER BY | | 6 | 78 | 4 (25)| 00:00:01 |
| 2 | TABLE ACCESS FULL| XXX | 6 | 78 | 3 (0)| 00:00:01 |
---------------------------------------------------------------------------
Видно, что индекс игнорируется, потому что есть значения NULL, а запрошены все записи.
но:
я@ora10>select * from xxx where a is not null order by a
A
----------
1
2
3
4
Execution Plan
----------------------------------------------------------
Plan hash value: 2441963755
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 4 | 52 | 1 (0)| 00:00:01 |
|* 1 | INDEX FULL SCAN | YYY | 4 | 52 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
-
> atruhin1 (01.07.08 16:15) [36]
> а про IBX для Interbase/Firebird ты не прав, в IB/FB и
> соответственно,
> в компонентах это абсолютно разные вещи.
Прошу прощения. Я сам не проверял. Все со слов пользователя.
-
А еще один довод от пользователя.
CREATE TABLE ..(
somecol char(1) CHECK somecol in ('M', 'W')
)
И соответственно в таком виде NULL позволяется, а пользователь не может его вставить через грид или другой какой контрол.
-
> И соответственно в таком виде NULL позволяется
не позволяется. Он вызывает нарушение ограничения :)
-
Всякое бывает.
Другой какой-нибудь контрол обработает, к примеру, Ctrl-Del и отобразит [NULL]
-
somecol char(1) CHECK somecol in ('M', 'W')
А где "Ребёнок" и "Домашнее жЫвотное"? :)
-
> Игорь Шевченко © (01.07.08 16:26) [43]
>
> не позволяется. Он вызывает нарушение ограничения :)
Не знаю как в Оракле, но в Постгресе не вызовет
-
> McSimm © (01.07.08 16:28) [44]
> Другой какой-нибудь контрол обработает, к примеру, Ctrl-
> Del и отобразит [NULL]
И ведь не поспоришь.
> Ega23 © (01.07.08 16:30) [45]
> А где "Ребёнок" и "Домашнее жЫвотное"? :)
Не догадалсо. :) я обычно пишу M\F (male\female), однако есть еще люди которым ближе man\woman :)
-
Кстати, по поводу приведенного примера я чего еще задумался. Ведь char(1) должен состоять из одного символа и точка. Это ведь не varchar(1). То есть в таком случае было бы может и логично пустую строку возводить в статус NULL, однако в случае varchar религия имеет место быть.
-
> я обычно пишу M\F (male\female),
sometimes camel
> Это ведь не varchar(1).
varchar(1) тоже состоит из одного символа и точка. Из половины символа он состоять не может. В оракле так они даже хранятся одинаково char(1) и varchar(1)
-
> pasha_golub (01.07.2008 15:07:00) [0]
TDataset говоришь?
Так ничего не выйдет, пустая строка равна nil и никакой структуры строки. Не возможно представить строку по другому как пустое в Дельфи. В базе может и можно.
-
> pasha_golub (01.07.2008 15:18:04) [4]
А где тут TDataset?
При том это всего лишь особенность получается при присвоение значения и обратно никак, только если специально присвоить NULL.
А этим NULL <> NULL ты что хотел сказать?
-
> Ega23 (01.07.2008 15:20:06) [6]
В вопросе на клиенте, и при том для типа string
А дальше пошел какой то разброд, уже далекий от вопроса.
-
> Ega23 (01.07.2008 15:32:08) [8]
> ftString - то при Null-значении показывать ''
А это как, хочешь Дельфи переписать?
-
> sometimes camel
>
упалпацтул!!!
КЛАСС!!!! :)))))))))))))
-
> pasha_golub (01.07.2008 15:07:00) [0]
Кстати ты собираешься ограничиться только этими серверами? И где в них там TDataset
-
> Ega23 (01.07.2008 15:44:16) [16]
Так не все же архитекторы грамотные.
Кстати как насчет минуса? Тоже не так одназначно.
-
> Ega23 (01.07.2008 15:47:19) [19]
Ага значит все таки о конкретных серверах будем говорить, тогда посмотри ANSII настройки. В частности SET NULLS в БОЛ
-
> Игорь Шевченко (01.07.2008 15:48:21) [21]
Разные вещи, NULL соответствует определению ANSI если только поведение не изменено для ANSI настроек, пошли кое где на поводу старого матобоеспечения (FoxPro например, а это у них основной носитель для импорта/экспорта).
Про Oracle молчим, Oracle и стандарты, это рок против наркотиков.
-
> Игорь Шевченко (01.07.2008 16:01:28) [28]
Твое предположение верно, может тебе попадались обсуждения с разработчиками по этому поводу.