Ваша проблема, когда вы достигли размера> 32k.Либо следуйте Java-решению Винсента для длительного хранения, либо сделайте это:
create global temporary table ltt(x clob)
on commit delete rows;
create or replace function length_of_long(p_tname in varchar2, p_cname in varchar2, p_rowid in rowid)
return number authid current_user
as
pragma autonomous_transaction;
l_length number;
begin
execute immediate
'insert into ltt(x)
select to_lob(' || p_cname || ')
from ' || p_tname || '
where rowid = :x' using p_rowid;
select dbms_lob.get_length(x) into l_length from ltt;
commit;
return l_length;
end;
И используйте его так:
select id, length_of_long('MY_TABLE', 'LONG_COL', rowid) as len from MY_TABLE;
Отказ от ответственности, я когда-то нашел этот подход в статье Тома Кайтаназад, аналогичное будет работать для LONG RAW, просто нужна временная таблица как BLOB.