Ограничение длины в 2000 октетов относится только к движку SQL. В Pl / sql вы можете использовать весь диапазон до 32767 (2 ^ 15-1).
С 12c ограничение длины 2000 снято.
Однако до 12c в клиенте sqlplus существует ограничение длины, которое не допускает размеры столбцов выше 4000 (значение для 11g2).
Следующий код работает для 11g2 и новее
var myid number;
exec :myid := 1234; -- whatever
DECLARE
l_r RAW(32767);
BEGIN
select dbms_lob.substr ( my_report, 2000, 1 ) head
into l_r
from my_table
where my_table.report_id = :myid
;
l_r := UTL_RAW.COPIES ( l_r, 10 );
dbms_output.put_line ( 'id ' || :myid || ', len(l_r) = ' || utl_raw.length(l_r));
END;
/
show errors
... в то время как для этой версии требуется 12c:
var myid number;
exec :myid := 1234; -- whatever
DECLARE
l_r RAW(32767);
BEGIN
select dbms_lob.substr ( my_report, 32767, 1 ) head
into l_r
from my_table
where my_table.report_id = :myid
;
dbms_output.put_line ( 'id ' || :myid || ', len(l_r) = ' || utl_raw.length(l_r));
END;
/
show errors