2010-05-10 4 views
2

Je souhaite extraire seulement les 1024 premiers octets d'un blob stocké et non le fichier entier. La raison en est que je veux juste extraire les métadonnées d'un fichier le plus rapidement possible sans avoir à sélectionner tout le blob.lire d'abord 1kb d'un blob d'oracle

Je comprends ce qui suit:

select dbms_lob.substr(file_blob, 16,1) 
from file_upload 
where file_upload_id=504; 

qui retourne comme hex. Comment puis-je faire cela afin qu'il retourne dans les données binaires sans sélectionner le blob entier?

Merci d'avance. DBMS_LOB.SUBSTR va, pour un BLOB, renvoyer un RAW.

Répondre

4

La plupart des environnements rendront cela en hexadécimal. Vous pouvez utiliser la fonction DUMP pour l'afficher dans d'autres formats.

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; 

Ceci renvoie les 10 premiers octets du BLOB en décimal (par exemple 0-255), hex et caractère. Ce dernier peut jeter des déchets non imprimables à l'écran et, si les jeux de caractères du client et de la base de données ne correspondent pas, subissent une «traduction».

Vous pouvez utiliser UTL_RAW.CAST_TO_VARCHAR2 qui peut vous donner ce que vous voulez.

select utl_raw.cast_to_varchar2(dbms_lob.substr(product_image,10,1)) chr 
from APEX_DEMO.DEMO_PRODUCT_INFO 
where product_id = 9