2014-11-11 3 views
2

У меня есть одна переменная LONG в переднем конце, а в типе данных конца столбца - CLOB. Когда происходит фиксация, пустые данные (NULL) переходят к переменной CLOB в конце. Когда мы проверяем данные на заднем конце, длина равна «0»; это означает, что оно содержит некоторое значение, но в переменной CLOB нет значения, которое равно NULL.Длина CLOB равна 0?

Почему у него длина 0?

ответ

3

Это 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 
+0

Когда я обязывающее данные из Oracle формирует 6i (Database Block), то задний конец показывает мне длину 0 вместо ноль. В чем причина значения 0? – Anky

+2

Вот что говорит мой ответ ... Вы читали? – Ben

+0

Большое спасибо. Я понял. – Anky

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