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;