Oracle Application Expressでは、BLOBサポートが提供されているため、開発者はフォームでのファイルの宣言的なアップロードおよびダウンロードを行うことができます。
アプリケーションの作成ウィザードを使用してフォームを作成する場合、フォーム型またはレポートおよびフォーム型のページを作成する場合、フォーム型のリージョンを作成する場合、または既存のフォームにアイテムを追加する場合、BLOB
型のデータベース列がソースであるアイテムは、ファイル参照型のアイテムになります。フォームがINSERT
にコールされる場合、ユーザーが選択したファイルは、BLOB
列にロードされます。フォームが更新にコールされる場合、ダウンロード・リンクが「参照」ボタンの右に表示されます。ユーザーは、このリンクを使用してファイルをダウンロードできます。
親トピック: フォームでのBLOBサポートの理解
デフォルトのBLOB
サポートでは、一般的なアプリケーションでBLOB
を効果的に管理するために必要とされるすべての情報が提供されているわけではありません。列がBLOB
であるという情報に加えて、ファイルの詳細情報も提供されると、エンド・ユーザーの使いやすさが向上します。ファイル参照ページ・アイテムには、この追加情報を完全に宣言的に管理することを容易にするための追加設定があります。
ヒント:
ファイル参照設定の詳細は、「アイテム・タイプについて」の「ファイル参照」を参照してください。
ファイル参照アイテム・タイプ内では、次の2つの異なるタイプの記憶域タイプが使用できます。
アイテム・ソース属性で指定されたBLOB
列: ここで説明する追加設定の構成をサポートする、完全に宣言的なアプローチです。これは、所有するデータベース表のBLOB
を参照します。
WWV_FLOW_FILES
表: 下位互換性のために用意されています。新しいアプリケーションでの使用はお薦めしません。
APEX_APPLICATION_TEMP_FILES
表: APEX_APPLICATION_TEMP_FILES
ビューでアクセスできる一時的な場所に、アップロードされたファイルを格納します。「ファイルをパージするタイミング」の選択に応じて、Oracle Application Expressにより、セッションの最後またはアップロード要求の最後にファイルが自動的に削除されます。
この追加情報を提供するには、MIMEタイプ、ファイル名、最終更新日およびキャラクタ・セット設定を格納および追跡するための追加の列を元表に追加することをお薦めします。これは表を拡張することで実行できます。次に例を示します。
ALTER TABLE emp ADD (ATTACH_MIMETYPE VARCHAR2(255), ATTACH_FILENAME VARCHAR2(255), ATTACH_LAST_UPDATE DATE, ATTACH_CHARSET VARCHAR2(128));
注意:
BLOB
のキャラクタ・セットはアップロード時に自動的に設定されません。BLOB
のキャラクタ・セット値を格納する場合、キャラクタ・セットを格納するために使用する列にバインドされる追加のページ・アイテムをページに提供する必要があり、ユーザーはその場合、アップロードするドキュメント用のキャラクタ・セットを指定できるようになります。
カスタム表でフォームを手動作成する場合も、この機能を利用できます。このことを行うには、DMLプロセス・タイプがDML_PROCESS_ROW
のページにおいて、「記憶域タイプ」設定が「アイテム・ソース属性で指定されたBLOB
列」である「ファイル参照」アイテム・タイプを使用します。このプロセスによって、表名と主キー列が決定されます。
親トピック: フォームでのBLOBサポートの理解
使用するBLOBがイメージの場合は、イメージをフォームで表示できます。これを宣言的に処理するには、「アイテム・タイプについて」の説明に従って、イメージの表示アイテム・タイプを使用します。手続き的に処理するには、「フォームおよびレポートでのBLOBサポートの理解」を参照してください。
親トピック: フォームでのBLOBサポートの理解
ファイル参照の使用時はNULL
への設定が存在しないため、イメージ参照を削除するメカニズムを提供する必要がある場合は、イメージを削除する特別なボタン(必要な列を無効化する機能を持つボタン)を含める必要があります。次に例を示します。
UPDATE demo_product_info SET product_image = NULL, MIMETYPE = NULL, FILENAME = NULL, IMAGE_LAST_UPDATE = NULL, CHARSET = NULL WHERE product_id = :P6_PRODUCT_ID;
親トピック: フォームでのBLOBサポートの理解