Check out http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO::P11_QUESTION_ID:367980988799.
You will want to use dbms_lob.substr
Per the post referenced above:
dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte );
for example:
select dbms_lob.substr( x, 4000, 1 ) from T;
will get me the first 4000 characters of the clob. Note that when using SQL as I did, the max length is 4000. You can get 32k using plsql:
declare my_var long; begin for x in ( select X from t )
loop my_var := dbms_lob.substr( x.X, 32000, 1 ); ....