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