Это what's documented:
Методы, используемые при обращении к ячейке в столбце LOB отличаются в зависимости от состояния данной клетки. Ячейка в колонке большого объекта может находиться в одном из следующих состояний:
NULL
создается ячейка таблицы, но клетка не держит локатора или значения.
Пустой
LOB экземпляр с локатором существует в клетке, но это не имеет никакого значения. Длина LOB равна нулю.
Населенного
большого объект экземпляр с локатором и значением существует в клетке.
Обратите внимание, что если LOB (в данном случае CLOB) является NULL, то длина NULL, но если локатор был инициализирован, то длина равна 0.
Это указывает на то, что вы находитесь , а не, вставляя NULL в колонку CLOB, а вместо этого - результат функции EMPTY_CLOB()
. Можно продемонстрировать:
SQL> create table tmp_clob_test (
2 a clob
3 , b clob
4 , c clob
5 );
Table created.
SQL>
SQL> insert into tmp_clob_test values(empty_clob(), null, 'x');
1 row created.
SQL>
SQL>
SQL> select length(a) a
2 , length(b) b
3 , length(c) c
4 from tmp_clob_test
5 ;
A B C
---------- ---------- ----------
0 1
Стоит отметить, что LONG data type is deprecated; это также стоит использовать CLOB на интерфейсе.
Если вы хотите, чтобы «исправить» это, то вы можете использовать NULLIF()
функцию:
SQL> select nullif(length(a), 0) as a, length(a) as a
2 from tmp_clob_test;
A A
---------- ----------
0
Когда я обязывающее данные из Oracle формирует 6i (Database Block), то задний конец показывает мне длину 0 вместо ноль. В чем причина значения 0? – Anky
Вот что говорит мой ответ ... Вы читали? – Ben
Большое спасибо. Я понял. – Anky