2010-05-10 2 views
2

Я хочу извлечь только первые 1024 байта сохраненного blob, а не весь файл. Причина этого заключается в том, что я хочу как можно быстрее извлечь метаданные из файла без необходимости выбора всего блоба.сначала прочитайте 1kb из blob from oracle

Я понимаю следующее:

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

, который возвращает его в шестнадцатеричной. Как я могу это сделать, чтобы он возвращал его в двоичные данные, не выбирая весь blob?

Заранее спасибо.

ответ

4

DBMS_LOB.SUBSTR, для BLOB, возвращает RAW. Большинство сред будут отображать это в шестнадцатеричном формате. Вы можете использовать функцию DUMP для просмотра в других форматах.

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; 

Это возвращает первые 10 байтов BLOB в десятичной форме (например, 0-255), hex и символ. Последний может выбросить на экран какой-то непечатаемый мусор, и, если набор символов клиента и базы данных не соответствует, претерпете некоторый «перевод».

Вы можете использовать UTL_RAW.CAST_TO_VARCHAR2, который может дать вам то, что вы хотите.

select utl_raw.cast_to_varchar2(dbms_lob.substr(product_image,10,1)) chr 
from APEX_DEMO.DEMO_PRODUCT_INFO 
where product_id = 9 
Смежные вопросы