Кажется, что SQLPLUS показывает пустые и пустые строки для объектов CLOB так, как я этого не ожидал.
Попробуйте следующее в SQLPLUS (я использую сервер Oracle 10g). Создайте таблицу с CLOB и вставьте пустой, пустой клоб, и то, что я считаю пустой строкой:
create table tableA (field1 number, field2 clob);
insert into tableA values (1, null);
insert into tableA values (2, empty_clob());
insert into tableA values (3, '');
Хорошо, давайте сделаем несколько запросов, но сначала нам нужно указать SQLPLUS, чтобы мы показывали нули для нас:
set null {NULL}
Для следующего запроса я бы ожидал, что вернется только строка 1, но она возвращает 2:
select * from tableA where field2 is null;
field1 field 2
-----------------------
1 {NULL}
3 {NULL}
Хм, поэтому ''
хранится как пустое значение в CLOB?
Хорошо, поэтому на основании этого результата я бы ожидал, что следующий запрос вернет все 3 строки, но покажет {NULL}
только в строках 1 и 3. Однако я получаю этот результат:
select * from tableA;
field1 field 2
-----------------------
1 {NULL}
2 {NULL}
3 {NULL}
Это сбивает с толку. Я думал, что было только 2 нуля, хотя я изначально ожидал 1. Так что здесь происходит? set null
не работает для CLOB, и если да, что я должен использовать вместо этого?
Я на самом деле пытаюсь решить другую проблему с нулевыми значениями CLOB, но из-за этого запутанного поведения я некоторое время запускал кольца, поэтому я хотел бы понять это, прежде чем продолжить.
Заранее спасибо
Боз