2017-10-19 265 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