Страница 2 из 8
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. |