2017-10-19 145 views
0

此链接介绍了如何从一个表中的BLOB显示的图像,以显示图像项 http://www.apexninjas.com/blog/2011/09/uploading-and-displaying-images-in-apex/在Oracle APEX接口中,我把这个代码放在哪里?

它建议写这个代码(该代码BLOB数据转换成HTML):

create or replace PROCEDURE image(image_id IN NUMBER) 
AS 
l_mime  VARCHAR2 (255); 
l_length  NUMBER; 
l_file_name VARCHAR2 (2000); 
lob_loc  BLOB; 

BEGIN 
     SELECT i.MIME_TYPE, i.CONTENT, DBMS_LOB.getlength (i.CONTENT), i.FILENAME 
     INTO l_mime, lob_loc, l_length, l_file_name 
     FROM EMP_IMAGE i 
     WHERE i.ID = image_id; 

     OWA_UTIL.mime_header (NVL (l_mime, 'application/octet'), FALSE); 
     htp.p('Content-length: ' || l_length); 
     htp.p('Content-Disposition: filename="' || SUBSTR(l_file_name, INSTR(l_file_name, '/') + 1) || '"'); 
     owa_util.http_header_close; 
     wpg_docload.download_file(Lob_loc); 
END image; 

我是新来的Oracle APEX 5,我不明白的地方在界面中我应该写代码

我的UI洛斯这样 https://i.imgur.com/7xCRO7U.png

回答

1

他们告诉你在数据库中创建该过程;它不是APEX组件。我不认为我会推荐他们打开安全漏洞的方法,以允许直接执行自定义本地过程。而且这不再是必要的;自2011年以来,APEX发生了很大变化。

在左侧,单击名为“IMAGE”的显示图像项目。然后在右侧的“设置”下,将“基于”更改为SQL语句返回的BLOB列,然后在那里放入一个查询,它将返回所需的列。

你需要一个主键来找到正确的行;在这里我假设你正在使用FILE_NAME页面项目,但是可能更好的选择是隐藏页面项目来保存IMAGES表格中的主键,也许称为“P1_ID”为“id”列,并在您的页面进程中将INSERT语句的末尾添加RETURNING id INTO :P1_ID。然后,您的“IMAGE”页面项目查询将如下所示:

SELECT i.CONTENT 
    FROM IMAGES i 
    WHERE i.ID = :P1_ID; 
+0

“SQL语句返回的BLOB列”的问题是它无法动态更新。它只加载一次,即使刷新动态操作或设置值也不能改变显示的图像。 – bewe

+0

我需要以编程方式更新图像 – bewe