Oracle Apex 實用筆記系列 2,oracleapex
1. 頁面設計
頁面A有若干region, 其中一個region用於檔案清單管理(包括顯示,下載,刪除),A。在頁面A有一button,點擊它會調用頁面B,頁面B負責檔案上傳,B。
圖A
圖B
2. 資料庫表設計
File |
FILE_ID Number, FILE_DESC Varchar2(256), CONTENT Blob, mime_type varchar2(256), char_set varchar2(256), last_update date, FILE_NAME varchar2(256) |
3. Apex實現3.1 在頁面A擷取上傳檔案清單可建立一個classic report region, region source是
select f.FILE_ID, f.FILE_DESC, f.FILE_NAME, dbms_lob.getlength("FILE_CONTENT") as FILE_CONTENT, MIME_TYPE, CHAR_SET, LAST_UPDATE, '<a href="javascript:$s(''P530_DELETE_FILE'', ''' || F.FILE_ID || ''');">Delete</a>' as DELETE_FILE from FILE f |
注意:由於BLOB不能直接映射成頁面元素,所以適用dbms_lob.getlength函數得到blob的大小作為預留位置。
在報告屬性(Report Attribute)標籤,點擊FILE_CONTENT進入該cloumn的設定:1. Number/Date Format選擇Blob;2. Format Mask:Download;3. Blob Table: FILE4. Blob Column: FILE_CONTENT5. Primary Key Column 1: FILE_ID;6. Mimetype Column: MIME_TYPE;7. FIlename Column:FILE_NAME;8. Last Updated Column: LAST_UPDATE;9. Character Set Column: CHAR_SET;10. Download Text: Download
3.2 頁面B上傳檔案使用頁面B作為一個單獨頁面上傳的一個原因是Apex無法在一個頁面建立多個Form on a Table,換句話說,Apex的一個頁面只能建立一個Form on a Table。建立Form on a Table頁面的好處是可以由Apex協助我們管理表格的插入,更新的細節。所以頁面B的建立只要跟著Apex建立Form on a Table嚮導一步一步走就可以了。
在修改FILE_CONTENT對應的item時,display as: 選File Brows在它的setting標籤中,1. Storage Type:Blob column specified in Item Source attribute;2. Mimetype Column: MIME_TYPE;3. FIlename Column:FILE_NAME;4. Last Updated Column: LAST_UPDATE;5. Character Set Column: CHAR_SET;
在Storage Type中,另一個選項是Table WWV_FLOW_FILES,這是Apex內建的一個用於檔案上傳的表。這是Apex老版本的做法,為了向後相容而保留。如果選擇這個選項,不同application的所有檔案上傳功能都會發到這個表,筆者認為這樣檔案管理會有些混亂,傾向建立自己的資料庫表來管理。
ORACLE APEX
請用WITZARD,有一個下拉選項
Oracle APEX中文手冊
這個真沒有