DBMS_LOB.SUBSTR restituirà, per un BLOB, un RAW. La maggior parte degli ambienti lo renderà in formato esadecimale. Puoi utilizzare la funzione DUMP per visualizzarlo in altri formati.
select dump(dbms_lob.substr(product_image,10,1),10),
dump(dbms_lob.substr(product_image,10,1),16),
dump(dbms_lob.substr(product_image,10,1),17)
from APEX_DEMO.DEMO_PRODUCT_INFO
where product_id = 9;
Questo restituisce i primi 10 byte del BLOB in decimale (es. 0-255), esadecimale e carattere. Quest'ultimo può lanciare sullo schermo spazzatura non stampabile e, se i set di caratteri del client e del database non corrispondono, subire una "traduzione".
Puoi utilizzare UTL_RAW.CAST_TO_VARCHAR2 che potrebbe darti ciò che desideri.
select utl_raw.cast_to_varchar2(dbms_lob.substr(product_image,10,1)) chr
from APEX_DEMO.DEMO_PRODUCT_INFO
where product_id = 9