Как преобразовать одну операцию в цикл для всех записей в таблице?
У меня есть таблица PHOTO. В этой таблице 3 столбца: id, MYFILE (blob), ex_id. Я написал сценарий, который позволил бы захватить фотографию с другой базы в столбец снимков в формате Base64 и записать ответ JSON. Но я не могу отладить этот скрипт вообще.
Mогу ли я отредактировать его, чтобы сделать все фотографии в цикле?
Этот скрипт работает только для одной записи (where id = 196041;):
Declare
v_clob_post CLOB;
v_clob CLOB;
l_body_b BLOB;
g_EXTERNAL_ID varchar2(300);
v_count int;
BEGIN
select MYFILE INTO l_body_b from PHOTO where id = 196041;
apex_json.initialize_clob_output;
apex_json.open_object;
apex_json.write('snapshot', blob_to_clob_base64(l_body_b));
apex_json.close_object;
V_clob := apex_json.get_clob_output;
apex_json.free_output;
apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'application/json';
v_clob_post := apex_web_service.make_rest_request(p_url => 'myURL',p_http_method => 'POST'
,p_body => v_clob );
apex_json.parse(v_clob_post);
g_EXTERNAL_ID := apex_json.get_varchar2(p_path => 'id_document'); -- Obtain access_token
update PHOTO set EXTERNAL_ID = g_EXTERNAL_ID where id = 196041;
end;
Я хочу сделать это для всей таблицы в цикле, чтобы сделать все фотографии одновременно.
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Для обработкки всех записей достаточно цикла с неявным курсором:
create table photo (id number, value blob, extid varchar2 (128));
insert into photo
select rownum, empty_blob(), null from xmlTable ('1 to 3');
declare rowcount number := 0;
begin
for r in (
select *
from photo) loop
/*** здесь вся логика обработки каждой фотографии из вопроса
***/
update photo p set extid = 'new external id here'
where p.id = r.id;
rowcount := rowcount + sql%rowcount;
end loop;
dbms_output.put_line (rowcount||' photos processed.');
end;
/
3 photos processed.