Конференция "Прочее" » Отождествление пустой строки и NULL
 
  • Игорь Шевченко © (01.07.08 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 © (01.07.08 16:21) [41]

    > atruhin1   (01.07.08 16:15) [36]


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

    Прошу прощения. Я сам не проверял. Все со слов пользователя.
  • pasha_golub © (01.07.08 16:25) [42]
    А еще один довод от пользователя.

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

    И соответственно в таком виде NULL позволяется, а пользователь не может его вставить через грид или другой какой контрол.
  • Игорь Шевченко © (01.07.08 16:26) [43]

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


    не позволяется. Он вызывает нарушение ограничения :)
  • McSimm © (01.07.08 16:28) [44]
    Всякое бывает.
    Другой какой-нибудь контрол обработает, к примеру, Ctrl-Del и отобразит [NULL]
  • Ega23 © (01.07.08 16:30) [45]
    somecol char(1) CHECK somecol in ('M', 'W')



    А где "Ребёнок" и "Домашнее жЫвотное"? :)
  • pasha_golub © (01.07.08 16:31) [46]

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


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

    Не знаю как в Оракле, но в Постгресе не вызовет
  • pasha_golub © (01.07.08 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 © (01.07.08 16:34) [48]
    Кстати, по поводу приведенного примера я чего еще задумался. Ведь char(1) должен состоять из одного символа и точка. Это ведь не varchar(1). То есть в таком случае было бы может и логично пустую строку возводить в статус NULL, однако в случае varchar религия имеет место быть.
  • Игорь Шевченко © (01.07.08 16:37) [49]

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


    sometimes camel


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


    varchar(1) тоже состоит из одного символа и точка. Из половины символа он состоять не может. В оракле так они даже хранятся одинаково char(1) и varchar(1)
  • Anatoly Podgoretsky © (01.07.08 16:37) [50]
    > pasha_golub  (01.07.2008 15:07:00)  [0]

    TDataset говоришь?
    Так ничего не выйдет, пустая строка равна nil и никакой структуры строки. Не возможно представить строку по другому как пустое в Дельфи. В базе может и можно.
  • Anatoly Podgoretsky © (01.07.08 16:39) [51]
    > pasha_golub  (01.07.2008 15:18:04)  [4]

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

    А этим NULL <> NULL ты что хотел сказать?
  • Anatoly Podgoretsky © (01.07.08 16:40) [52]
    > Ega23  (01.07.2008 15:20:06)  [6]

    В вопросе на клиенте, и при том для типа string
    А дальше пошел какой то разброд, уже далекий от вопроса.
  • Anatoly Podgoretsky © (01.07.08 16:41) [53]
    > Ega23  (01.07.2008 15:32:08)  [8]

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

    А это как, хочешь Дельфи переписать?
  • Ega23 © (01.07.08 16:41) [54]

    > sometimes camel
    >


    упалпацтул!!!
    КЛАСС!!!!   :)))))))))))))
  • Anatoly Podgoretsky © (01.07.08 16:43) [55]
    > pasha_golub  (01.07.2008 15:07:00)  [0]

    Кстати ты собираешься ограничиться только этими серверами? И где в них там TDataset
  • Anatoly Podgoretsky © (01.07.08 16:45) [56]
    > Ega23  (01.07.2008 15:44:16)  [16]

    Так не все же архитекторы грамотные.
    Кстати как насчет минуса? Тоже не так одназначно.
  • Anatoly Podgoretsky © (01.07.08 16:46) [57]
    > Ega23  (01.07.2008 15:47:19)  [19]

    Ага значит все таки о конкретных серверах будем говорить, тогда посмотри ANSII настройки. В частности SET NULLS в БОЛ
  • Anatoly Podgoretsky © (01.07.08 16:49) [58]
    > Игорь Шевченко  (01.07.2008 15:48:21)  [21]

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

    Про Oracle молчим, Oracle и стандарты, это рок против наркотиков.
  • Anatoly Podgoretsky © (01.07.08 16:51) [59]
    > Игорь Шевченко  (01.07.2008 16:01:28)  [28]

    Твое предположение верно, может тебе попадались обсуждения с разработчиками по этому поводу.
 
Конференция "Прочее" » Отождествление пустой строки и NULL
Есть новые Нет новых   [134439   +35][b:0][p:0.002]