that just means whatever webdb/portal object you are selecting that into isn't big enough. You can see for yourself that it works in general:
ops$tkyte@ORA817DEV.US.ORACLE.COM> create table t ( b_blob blob );
Table created.
ops$tkyte@ORA817DEV.US.ORACLE.COM>
ops$tkyte@ORA817DEV.US.ORACLE.COM> declare
2 l_raw raw(10000);
3 begin
4 l_raw := hextoraw( rpad( to_char(ascii('A'),'fmXX'), 20000, to_char(ascii('A'),'fmXX') ) );
5 insert into t values ( l_raw );
6 end;
7 /
PL/SQL procedure successfully completed.
ops$tkyte@ORA817DEV.US.ORACLE.COM>
ops$tkyte@ORA817DEV.US.ORACLE.COM> select utl_raw.cast_to_varchar2( dbms_lob.substr( b_blob, 2000, 1 ) ) from t;
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(B_BLOB,2000,1))
-----------------------------------------------------------------------------------------------------------------------------------
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
....