Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

Отождествление пустой строки и NULL   Найти похожие ветки 

 
Игорь Шевченко ©   (2008-07-01 16:20) [40]

Если пример [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 |
-------------------------------------------------------------------------


 
pasha_golub ©   (2008-07-01 16:21) [41]


> atruhin1   (01.07.08 16:15) [36]


> а про IBX для Interbase/Firebird ты не прав, в IB/FB  и
> соответственно,
> в компонентах это абсолютно разные вещи.

Прошу прощения. Я сам не проверял. Все со слов пользователя.


 
pasha_golub ©   (2008-07-01 16:25) [42]

А еще один довод от пользователя.

CREATE TABLE ..(
somecol char(1) CHECK somecol in ("M", "W")
)

И соответственно в таком виде NULL позволяется, а пользователь не может его вставить через грид или другой какой контрол.


 
Игорь Шевченко ©   (2008-07-01 16:26) [43]


> И соответственно в таком виде NULL позволяется


не позволяется. Он вызывает нарушение ограничения :)


 
McSimm ©   (2008-07-01 16:28) [44]

Всякое бывает.
Другой какой-нибудь контрол обработает, к примеру, Ctrl-Del и отобразит [NULL]


 
Ega23 ©   (2008-07-01 16:30) [45]

somecol char(1) CHECK somecol in ("M", "W")

А где "Ребёнок" и "Домашнее жЫвотное"? :)


 
pasha_golub ©   (2008-07-01 16:31) [46]


> Игорь Шевченко ©   (01.07.08 16:26) [43]


>
> не позволяется. Он вызывает нарушение ограничения :)

Не знаю как в Оракле, но в Постгресе не вызовет


 
pasha_golub ©   (2008-07-01 16:32) [47]


> McSimm ©   (01.07.08 16:28) [44]


> Другой какой-нибудь контрол обработает, к примеру, Ctrl-
> Del и отобразит [NULL]

И ведь не поспоришь.


> Ega23 ©   (01.07.08 16:30) [45]


> А где "Ребёнок" и "Домашнее жЫвотное"? :)

Не догадалсо. :) я обычно пишу M\F (male\female), однако есть еще люди которым ближе man\woman :)


 
pasha_golub ©   (2008-07-01 16:34) [48]

Кстати, по поводу приведенного примера я чего еще задумался. Ведь char(1) должен состоять из одного символа и точка. Это ведь не varchar(1). То есть в таком случае было бы может и логично пустую строку возводить в статус NULL, однако в случае varchar религия имеет место быть.


 
Игорь Шевченко ©   (2008-07-01 16:37) [49]


> я обычно пишу M\F (male\female),


sometimes camel


> Это ведь не varchar(1).


varchar(1) тоже состоит из одного символа и точка. Из половины символа он состоять не может. В оракле так они даже хранятся одинаково char(1) и varchar(1)


 
Anatoly Podgoretsky ©   (2008-07-01 16:37) [50]

> pasha_golub  (01.07.2008 15:07:00)  [0]

TDataset говоришь?
Так ничего не выйдет, пустая строка равна nil и никакой структуры строки. Не возможно представить строку по другому как пустое в Дельфи. В базе может и можно.


 
Anatoly Podgoretsky ©   (2008-07-01 16:39) [51]

> pasha_golub  (01.07.2008 15:18:04)  [4]

А где тут TDataset?
При том это всего лишь особенность получается при присвоение значения и обратно никак, только если специально присвоить NULL.

А этим NULL <> NULL ты что хотел сказать?


 
Anatoly Podgoretsky ©   (2008-07-01 16:40) [52]

> Ega23  (01.07.2008 15:20:06)  [6]

В вопросе на клиенте, и при том для типа string
А дальше пошел какой то разброд, уже далекий от вопроса.


 
Anatoly Podgoretsky ©   (2008-07-01 16:41) [53]

> Ega23  (01.07.2008 15:32:08)  [8]

> ftString - то при Null-значении показывать ""

А это как, хочешь Дельфи переписать?


 
Ega23 ©   (2008-07-01 16:41) [54]


> sometimes camel
>


упалпацтул!!!
КЛАСС!!!!   :)))))))))))))


 
Anatoly Podgoretsky ©   (2008-07-01 16:43) [55]

> pasha_golub  (01.07.2008 15:07:00)  [0]

Кстати ты собираешься ограничиться только этими серверами? И где в них там TDataset


 
Anatoly Podgoretsky ©   (2008-07-01 16:45) [56]

> Ega23  (01.07.2008 15:44:16)  [16]

Так не все же архитекторы грамотные.
Кстати как насчет минуса? Тоже не так одназначно.


 
Anatoly Podgoretsky ©   (2008-07-01 16:46) [57]

> Ega23  (01.07.2008 15:47:19)  [19]

Ага значит все таки о конкретных серверах будем говорить, тогда посмотри ANSII настройки. В частности SET NULLS в БОЛ


 
Anatoly Podgoretsky ©   (2008-07-01 16:49) [58]

> Игорь Шевченко  (01.07.2008 15:48:21)  [21]

Разные вещи, NULL соответствует определению ANSI если только поведение не изменено для ANSI настроек, пошли кое где на поводу старого матобоеспечения (FoxPro например, а это у них основной носитель для импорта/экспорта).

Про Oracle молчим, Oracle и стандарты, это рок против наркотиков.


 
Anatoly Podgoretsky ©   (2008-07-01 16:51) [59]

> Игорь Шевченко  (01.07.2008 16:01:28)  [28]

Твое предположение верно, может тебе попадались обсуждения с разработчиками по этому поводу.


 
Anatoly Podgoretsky ©   (2008-07-01 16:52) [60]

> pasha_golub  (01.07.2008 16:08:29)  [29]

Видишь ли МС не кладет, а позволяет управлять этим, а насколько я помню Оракл именно кладет. При том вроде и не последовательны.


 
Anatoly Podgoretsky ©   (2008-07-01 16:54) [61]

> McSimm  (01.07.2008 16:09:31)  [31]

Пустым ты что в данном случае считаешь, если "" то по стандарту одну можно. А если NULL то по стандарту ни одно, поскольку NULL это не определено, то оно и не может представлять собой конкретную строку, а вот пустая строка может.


 
Anatoly Podgoretsky ©   (2008-07-01 16:55) [62]

> Игорь Шевченко  (01.07.2008 16:13:33)  [33]

> Оракл появился немного раньше стандартов.

И вырос в такого монстра, что плевал на всех, он сам себе стандарт.


 
Anatoly Podgoretsky ©   (2008-07-01 16:57) [63]

> atruhin1  (01.07.2008 16:15:36)  [36]

> Иногда удобно, иногда нет.

Вот это не должно быть основанием, поскольку результаты не гарантируются, не пройдет даже тестов.


 
McSimm ©   (2008-07-01 16:58) [64]


> Пустым ты что в данном случае считаешь, если "" то по стандарту
> одну можно. А если NULL то по стандарту ни одно, поскольку
> NULL это не определено

Так вопрос про Оракл был, где "" и NULL суть одно.

Насчет стандарта - не совсем понял. Unique key, насколько я с ними сталкивался, позволяет хранить NULL в любом количестве.


 
Ega23 ©   (2008-07-01 17:01) [65]


> Unique key, насколько я с ними сталкивался, позволяет хранить
> NULL в любом количестве.


Короче, была какая-то фигня с Null. То ли с FTS, то ли с индексом...
В смысле, что только одно значение null в столбце на всю таблицу.


 
Игорь Шевченко ©   (2008-07-01 17:23) [66]

Anatoly Podgoretsky ©   (01.07.08 16:55) [62]


> И вырос в такого монстра, что плевал на всех, он сам себе
> стандарт.


Насколько мне известно, стандарту целиком и полностью не соответствует ни одна СУБД. У каждой есть свои расширения, отходящие от стандарта.

Кстати, сам Оракл пишет в документации:

"Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls."


 
Поросенок Винни-Пух ©   (2008-07-01 17:37) [67]

то оно и не может представлять собой конкретную строку, а вот пустая строка может.

Если пустая строка может представлять конкретную строку ("равноправное" значение строкового типа), то тогда было бы возможно определить сколько именно таких значений содержится в этом посте.
А этого никто определить не сможет.


 
McSimm ©   (2008-07-01 17:44) [68]


> сколько именно таких значений содержится в этом посте.

Я могу это определить.
Этот пост представляет собой запись из нескольких полей (некоторые отображаются, некоторые нет). Из отображаемых - одно поле представляет собой пустую строку.

А дробить одно поле - некорректно. Или придется считать количество нулей в числе 17.


 
Поросенок Винни-Пух ©   (2008-07-01 17:48) [69]

Я могу это определить.

Допустим.
Определил, что из там 10.
А я утверждаю что изх там 1000.
Как определить кто прав?


 
McSimm ©   (2008-07-01 17:53) [70]


> Как определить кто прав?

гм... я даже теряюсь... при таком подходе остается только назначить незаинтересованных арбитров и спросить кому они больше верят :)

Я даже могу предоставить саму запись на рассмотрение (хотя ее и так видно)
name: "Поросенок Винни-Пух",
email: "",
ip: "**.***.**.***"

и т.д.


 
McSimm ©   (2008-07-01 17:58) [71]

есть еще вариант, спросить у perl

# smth like this
foreach (keys %fields) {
 $count++ if ($REC{$_} eq "");
}


 
Поросенок Винни-Пух ©   (2008-07-01 18:02) [72]

ну зачем же отмахиваться от простого вопроса?
есть два строковых литерала, один пустой;
я с помошью нескольких конкатенаций делаю из них итоговую строку.
вопрос: определить по итоговой строке сколько раз я в нее вставил пустой литерал.


 
pasha_golub ©   (2008-07-01 18:07) [73]


> Поросенок Винни-Пух ©   (01.07.08 17:37) [67]


> Если пустая строка может представлять конкретную строку
> ("равноправное" значение строкового типа), то тогда было
> бы возможно определить сколько именно таких значений содержится
> в этом посте.

Нелогично размышляете. Я уже писал что пустая строка есть инвариант по отношению к операции конкатенации. Можно провести паралели с каноническим разложением числа на множители (сорри если коряво звучит, учил на украинском), коее имеет вид a = p1^n1*p2^n2...*pk^nk*E, где pi - простые числа неравные 1.


 
McSimm ©   (2008-07-01 18:08) [74]


> ну зачем же отмахиваться от простого вопроса?
> есть два строковых литерала, один пустой;
> я с помошью нескольких конкатенаций делаю из них итоговую
> строку.
> вопрос: определить по итоговой строке сколько раз я в нее
> вставил пустой литерал.

Я уже писал про количество нулей в числе 17.


 
pasha_golub ©   (2008-07-01 18:09) [75]


> Поросенок Винни-Пух ©   (01.07.08 18:02) [72]


> есть два строковых литерала, один пустой;
> я с помошью нескольких конкатенаций делаю из них итоговую
> строку.
> вопрос: определить по итоговой строке сколько раз я в нее
> вставил пустой литерал.

Есть два слагаемых, один из них 0. Я с помощью некоторых операций сложения делаю из них сумму.
Вопрос: определить по итоговой сумме сколько раз я прибавил 0


 
McSimm ©   (2008-07-01 18:09) [76]

Поле содержит одно значение. Можно считать сколько значений содержит запись или выборка. Какой смысл считать количество значений в одном поле ? (то же - в одной переменной) ?


 
Поросенок Винни-Пух ©   (2008-07-01 18:10) [77]

Я уже писал про количество нулей в числе 17.

не надо путать публику.
было сказано, что пустая строка - это точно такое же значение строкового типа, как и любая другая строка.
Так что это за значение такое, если его нельзя обнаружить и посчитать?


 
McSimm ©   (2008-07-01 18:13) [78]

И, кстати о конкатенациях, сколько значений "АА" содержится в строке "АААА" - два или три ?


 
McSimm ©   (2008-07-01 18:14) [79]


> пустая строка - это точно такое же значение строкового типа,
>  как и любая другая строка.

Равно как и 0 мало отличается от любого другого числового значения.


 
McSimm ©   (2008-07-01 18:14) [80]


> И, кстати о конкатенациях, сколько значений "АА" содержится
> в строке "АААА" - два или три ?

Правильный ответ - ни одного



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.64 MB
Время: 0.031 c
2-1216278320
PPP
2008-07-17 11:05
2008.08.24
что такое {$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-


2-1216390303
Lines
2008-07-18 18:11
2008.08.24
Вывод текста через Canvas.TextOut


11-1192907816
Turbid
2007-10-20 23:16
2008.08.24
TabControl и XP


15-1214169951
Германн
2008-06-23 01:25
2008.08.24
У нас есть прекрасный шанс!


15-1215183486
Хохол
2008-07-04 18:58
2008.08.24
Пятничный флуд: Большой адронный коллайдер