在Oracle APEX接口中我把这段代码放在哪里?

时间:2017-10-19 15:41:34

标签: oracle oracle-apex oracle-apex-5

此链接说明如何将表格中的BLOB图像显示到显示图像项目 http://www.apexninjas.com/blog/2011/09/uploading-and-displaying-images-in-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的新手,我不明白界面应该在哪里编写代码

我的用户界面像这样松散 https://i.imgur.com/7xCRO7U.png

1 个答案:

答案 0 :(得分:1)

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

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

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

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