прочитайте первый 1kb блоба от оракула - PullRequest
2 голосов
/ 10 мая 2010

Я хочу извлечь только первые 1024 байта хранимого большого двоичного объекта, а не весь файл. Причина в том, что я хочу просто извлечь метаданные из файла как можно быстрее, не выделяя весь большой двоичный объект.

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

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

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

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

1 Ответ

4 голосов
/ 10 мая 2010

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), шестнадцатеричном и символьном. Последний может выбрасывать на экран некоторое количество непечатаемого мусора и, если наборы символов клиента и базы данных не совпадают, подвергаться некоторому «переводу».

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...