Классика баз данных - статьи

       

NULL значения


Начнем сравнение с реализации NULL-значений в ANSI SQL и Oracle SQL. Согласно ANSI все типы данных должны поддерживать неопределенные или NULL значения. Oracle в полной мере поддерживает это правило для всех типов, за исключением символьных. Для любых символьных данных пустая строка интерпретируется как NULL, например два оператора Oracle SQL:

INSERT INTO TEST(COL1) VALUES(NULL) и INSERT INTO TEST(COL1) VALUES('')

полностью идентичны и вставят в таблицу значения NULL, а не пустые строки.

В Oracle вообще нельзя вставить пустую строку, так как она будет рассматриваться как NULL . Это отклонение особенно актуально при сравнении строк, например пусть есть следующая таблица:

TEST COL1 COL2 1 '' 'Str1' 2 'a' 'Str2'

тогда оператор SELECT * FROM TEST WHERE COL1=''в Oracle будет интерпретироваться как SELECT * FROM TEST WHERE COL=NULL и не вернет НИОДНОЙ строчки, в тоже время в ANSI SQL данный оператор вернет первую строку.

Оператор SELECT * FROM TEST WHERE COL1<>''в Oracle будет интерпретироваться как SELECT * FROM TEST WHERE COL<>NULL и также не вернет НИОДНОЙ строчки, в ANSI SQL данный оператор вернет вторую строку.

Чтобы операторы отработал корректно его следует заменить на:

SELECT * FROM TEST WHERE COL1 IS NULL и SELECT * FROM TEST WHERE COL1 IS NOT NULL.

Таким образом при сравнении величины с пустой строкой в Oracle следует пользоваться предложениями IS NULL и IS NOT NULL.



Содержание раздела