Oracle пустые строки - PullRequest
       11

Oracle пустые строки

7 голосов
/ 28 марта 2009

Как вы, ребята, относитесь к пустым строкам в Oracle?

Оператор # 1 : Oracle обрабатывает пустую строку (например, '') как NULL в полях "varchar2".
Оператор # 2 : у нас есть модель, которая определяет абстрактную «структуру таблицы», где у нас есть поля, которые не могут быть NULL, но может «пустой». Эта модель работает с различными СУБД; почти везде, все просто отлично, но не с Oracle. Вы просто не можете вставить пустую строку в поле "не ноль".
Оператор # 3 : непустое значение по умолчанию в нашем случае не допускается.

Итак, кто-то будет так любезен сказать мне - как мы можем решить это?

Ответы [ 3 ]

7 голосов
/ 28 марта 2009

Вот почему я никогда не понимал, почему Oracle так популярен. На самом деле они не следуют стандарту SQL, основываясь на глупом решении, которое они приняли много лет назад.

В справочнике по Oracle 9i SQL говорится (по крайней мере, три основные версии):

Oracle в настоящее время обрабатывает символьное значение с нулевой длиной как ноль. Однако в будущих выпусках это может не соответствовать действительности, и Oracle рекомендует не рассматривать пустые строки так же, как пустые.

Но они не говорят что вы должны сделать. Единственные способы, которые я когда-либо нашел, чтобы обойти эту проблему, являются:

  • имеет значение Sentinel, которое не может присутствовать в ваших реальных данных для представления значения NULL (например, «дезоксирибонуклеиновый» для поля фамилии и надеется, что кинозвезды не начнут давать своим детям странные фамилии, а также странные имена: - ).
  • имеет отдельное поле, чтобы указать, является ли первое поле действительным или нет, в основном то, что реальная база данных делает с NULL.
3 голосов
/ 28 марта 2009

Разрешено ли говорить "Не поддерживает Oracle, пока он не поддерживает стандартное поведение SQL"? Это кажется наименее болезненным способом во многих отношениях.

Если вы не можете форсировать (использовать) один пробел или, возможно, Unicode Zero Width Non-Break Space (U + FEFF), то вам, вероятно, придется пройти всю свинью и использовать что-то неправдоподобное, например, 32 Z для указывают на то, что данные должны быть пустыми, но это не так, потому что используемая СУБД - Orrible.

1 голос
/ 29 марта 2009

Пустая строка и NULL в Oracle - это одно и то же. Вы хотите разрешить пустые строки, но запретить NULL.

Вы наложили ограничение NOT NULL на вашу таблицу, которое совпадает с ограничением не пустая строка. Если вы удалите это ограничение, что вы теряете?

...