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

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

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

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

3 ответа

Решение

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

Справочник по Oracle 9i SQL заявляет (это было там по крайней мере для трех основных версий):

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

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

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

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

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

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

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

Другие вопросы по тегам