有数百个高容量的tif文件 我想在插入数据库之前减小它们的大小。 我能怎么做?我尝试了以下功能但文件但是 文件插入后消失并且没有大小
DECLARE
vImageData BLOB;
vSizedImage BLOB;
BEGIN
SELECT file_blob
INTO vImageData
FROM adoption_pix
WHERE ID = 529;
DBMS_Lob.createTemporary(vSizedImage, FALSE, DBMS_LOB.CALL);
ORDSYS.OrdImage.processCopy(vImageData, 'maxScale=75 75', vSizedImage);
UPDATE ADOPTION_PIX SET FILE_BLOB = vSizedImage
where id = 529;
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('Error Msg '|| SQLERRM);
commit;
END;
如果这是一项一次性任务,最简单的方法是在操作系统级别执行此任务。
1 将 blob 提取到操作系统
declare
l_blob blob;
l_len int;
l_os_file utl_os_file.file_type;
l_raw raw(32767);
l_size int := 32767;
l_idx int;
begin
for i in ( select MY_BLOB, MY_FILENAME from MY_TABLE )
loop
l_idx := 1;
l_blob := i.my_blob;
l_len := dbms_lob.getlength(l_blob);
l_os_file := utl_os_file.fopen('DIR',i.MY_FILENAME ,'wb', 32767);
while l_idx <= l_len loop
dbms_lob.read(l_blob, l_size, l_idx, l_raw);
utl_os_file.put_raw(l_os_file, l_raw, true);
l_idx := l_idx + l_size;
end loop;
utl_os_file.fclose(l_os_file);
end loop;
end;
/
2 使用“ffmpeg”之类的东西批量调整它们的大小
3 将它们重新装入
insert into MY_NEW_TABLE
values ( to_blob(bfilename('DIR','each_file_name'));