2016-07-12 11 views
0

Когда я вставляю пустую строку в столбец таблицы базы данных, похоже, что она внутренне хранится как NULL. Так почему я не могу выбрать соответствующую строку, ища именно эту пустую строку?пустая строка в oracle

Пример:

insert into mytable (mycolumn,col2,col3) values ('','xyz','abc'); 

// now there is a row having mycolumn == NULL 

select * from mytable where mycolumn=''; 

// empty :(

Что я могу сделать по этому поводу?

+0

Связанных http://stackoverflow.com/questions/203493/why-does-oracle-9i-treat-an-empty-string-as-null/203536#203536 –

ответ

3

Это странный анахронизм в Oracle (с использованием настроек по умолчанию). Oracle действительно обрабатывает пустую строку как NULL. Это включает в сравнениях, так:

where mycolumn = '' 

так же, как:

where mycolumn = NULL 

И это никогда не возвращает истину (NULL <> NULL).

Мой совет? Привыкайте к использованию NULL явно и писать:

where mycolumn is null 
+0

upvoted для анахронизма: P – SriniV

+0

это действительно сосет – Ferenjito

+0

Заинтересованы в вашей заметке о «использовании настроек по умолчанию». Я не знал, что есть параметр, где вы можете попросить Oracle обрабатывать пустые строки, отличные от NULL. Не могли бы вы рассказать? Благодаря! – mathguy

2

Поскольку Oracle странно, что путь. Он обрабатывает NULL и пустую строку как идентичные. И из-за этого что-либо с = '' или! = '' Будет иметь логическое значение UNKNOWN, а не TRUE. Чтобы проверить равенство или неравенство с пустой строкой, вы должны проверить для mycolumn IS NULL или NOT NULL. (Эта часть, хотя, о проверке для NULL, не Oracle - это стандарт SQL.) В любом случае, в Oracle условие равенства =, а не ==.

1

Read here

пустая строка рассматривается как нулевое значение в Oracle. Также важно отметить, что нулевое значение уникально тем, что вы не можете использовать обычные операнды (=, <,> и т. Д.) По нулевому значению. Вместо этого вы должны использовать условия IS NULL и NOT NULL.

0

Значения NULL представляют собой отсутствующие или неизвестные данные. Значения NULL используются в качестве заполнителей или как запись по умолчанию в столбцах, чтобы указать, что фактические данные отсутствуют. NULL является нетипизированным в SQL, что означает, что он не является целым числом, символом или любым другим конкретным типом данных.

Обратите внимание, что NULL не совпадает с пустой строкой данных или числовым значением «0». В то время как NULL указывает на отсутствие значения, пустая строка и числовой нуль обе представляют собой фактические значения.

В то время как значение NULL может быть назначен, он не может быть приравнено ни с чем, в том числе itself.It также важно отметить, что нулевое значение является уникальным

Поскольку NULL не представляют или приравнивают к типу данных , вы не можете проверить значения NULL с любыми операторами сравнения, такими как =, <, или <>.

Это может помочь вам четко понять NULL в Oracle.

Смежные вопросы