declare
    l_response  clob;
    l_clob      clob;
    l_offset    integer;
    l_length    integer;
    l_image  ebmj_images%rowtype;
    l_output varchar2(80);
begin
    owa_util.mime_header('text/html', false, 'utf-8');
    owa_util.http_header_close;
    select * into l_image from ebmj_images where title = :title;
    dbms_lob.createTemporary(l_response, false, dbms_lob.CALL);
    /* set element to refresh by turbo frames */
    l_output := q'~<turbo-frame id="~';
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    l_output := coalesce(:id, 'no-element');
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    l_output := q'~">~';
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    /* open img tag */
    l_output := q'~<img src="data:~';
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    l_output := l_image.content_mimetype;
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    l_output := q'~;base64,~';
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    /* base64 encoded image */
    l_clob := apex_web_service.blob2clobbase64(l_image.content, 'N');
    l_length := dbms_lob.getlength(l_clob);
    l_offset := dbms_lob.getlength(l_response) + 1;
    dbms_lob.copy(
        dest_lob => l_response
        ,src_lob => l_clob
        ,amount =>  l_length
        ,dest_offset => l_offset
        ,src_offset => 1
    );
    /* close img tag */
    l_output := q'~">~';
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    l_output := q'~</turbo-frame>~';
    dbms_lob.writeAppend(l_response, length(l_output), l_output);
    /* return img tag */
    apex_util.prn(l_response, false);
    dbms_lob.freeTemporary(l_response);
exception
    when no_data_found then
        :status_code := 204;
        htp.p('<div>no data found</div>');
end;