Проблемы с созданием миниатюр с помощью Ordimage.ProcessCopy () внутри курсора - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь создать миниатюры из 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;

1 Ответ

0 голосов
/ 07 мая 2019

Получил это на работу. Пришлось изменить некоторые вещи.

  cursor photos is select * from placer_photo 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;
...