Я пытаюсь создать миниатюры из BLOB-объектов, хранящихся в таблице в Oracle. Я могу получить ordimage.processCopy для обработки отдельных строк, но я бы хотел запустить процесс для всех моих строк в таблице.
Насколько я понимаю, мне нужно создать курсор, а затем перебрать курсор для обработки каждой строки. В настоящее время я получаю сообщение об ошибке «ORA-06510: PL / SQL: необработанное пользовательское исключение», и у меня нет идей. Кто-нибудь может дать некоторое представление?
DECLARE
cursor photos is select PHOTO_ID from placer_photo;
v_file_content blob;
v_file_display blob;
v_thumb blob;
v_id number;
BEGIN
for i in photos
loop
SELECT photo_id, file_content, file_display, file_thumbnail INTO v_id, v_file_content, v_file_display, v_thumb FROM placer_photo where photo_id = i.photo_id
for update;
/*DBMS_OUTPUT.PUT_LINE(v_id);*/
ordimage.processCopy(v_file_content, 'maxScale=800 800', v_file_display);
ordimage.processCopy(v_file_content, 'maxScale=32 32', v_thumb);
UPDATE placer_photo
SET file_thumbnail = v_thumb,
file_display = v_file_display
where photo_id = i.photo_id;
COMMIT;
end loop;
END;
РЕДАКТИРОВАТЬ: получил его на работу.
DECLARE
cursor photos is select * from placer_photo where photo_id = 118 for update;
v_file_content blob;
v_file_display blob;
v_thumb blob;
v_id number;
v_date date;
BEGIN
for i in photos
loop
DBMS_OUTPUT.PUT_LINE(i.photo_id);
v_file_content := i.file_content;
v_file_display := i.file_display;
v_thumb := i.file_thumbnail;
ordimage.processCopy(v_file_content, 'maxScale=800 800', v_file_display);
ordimage.processCopy(v_file_content, 'maxScale=100 100', v_thumb);
update placer_photo
set file_display = v_file_display,
file_thumbnail = v_thumb
where current of photos;
end loop;
END;