4 PL/SQL Gateway用のOracle Multimedia Code Wizardサンプル・アプリケーション

PL/SQL Gateway用のOracle Multimedia Code Wizardサンプル・アプリケーションでは、Oracle Multimediaオブジェクト型を使用してデータベースに格納されたマルチメディア・データをアップロードおよび取得するPL/SQL GatewayのPL/SQLプロシージャを作成します。

このアプリケーションでは、次のことを想定しています。

  • PL/SQL Gatewayを使用したPL/SQLアプリケーションの開発に精通している。

  • Oracle Multimedia Code Wizardサンプル・アプリケーションをすでにインストールおよび構成している。

Oracle Multimedia Code Wizardサンプル・アプリケーションは、Oracle Technology Network (OTN)からダウンロード可能なOracle Database Examplesのメディアからインストールできます。Oracle Database Examplesメディアをインストールした後、サンプル・アプリケーション・ファイルとREADME.txtファイルは次の場所にあります。

<ORACLE_HOME>/ord/http/demo/plsgwycw (LinuxおよびUNIXの場合)

<ORACLE_HOME>\ord\http\demo\plsgwycw (Windowsの場合)

この章では、Code Wizardサンプル・アプリケーションの実行方法を説明します。このサンプル・アプリケーションをインストールおよび構成する場合の追加要件および手順については、README.txtファイルを参照してください。

この章では、次の内容を説明します。

関連項目:

Oracle Multimediaのオブジェクト型を使用してメディアをアップロードおよび取得するためにPL/SQLスクリプトを使用するフォト・アルバム・サンプルWebアプリケーションについては、「Oracle Multimedia PL/SQLフォト・アルバム・サンプル・アプリケーション」を参照してください。

4.1 Code Wizardサンプル・アプリケーションの実行

このトピックでは、Code Wizardアプリケーションの実行方法について説明します。

Code Wizardサンプル・アプリケーションを使用してテスト・メディア・アクセス・プロシージャを作成およびテストするには、次の手順を実行する必要があります。

  1. Code Wizardで使用する、新しいデータベース・アクセス記述子(DAD)を作成するか、または既存のDADを選択します。
  2. Code Wizardの管理機能を使用して、DADの使用を認可します。
  3. メディアのアップロード・プロシージャおよび取得プロシージャを作成します。

4.2 Code Wizardサンプル・アプリケーションの説明

Code Wizardサンプル・アプリケーションを使用して、データベースに格納されたメディア・データ(イメージ、オーディオ、ビデオおよび一般的なメディア)をアップロードおよび取得するPL/SQL GatewayのPL/SQLストアド・プロシージャを作成できます。

Oracle Multimedia Code Wizardサンプル・アプリケーションでは、Oracle Multimediaのこれらのオブジェクト型とそれぞれのメソッドが使用されます。

  • ORDImage

  • ORDAudio

  • ORDVideo

  • ORDDoc

Code Wizardでは、表示される手順に従って、メディア取得プロシージャまたはメディア・アップロード・プロシージャを作成できます。スタンドアロン・メディア・アクセス・プロシージャを作成およびコンパイルできます。または、PL/SQLパッケージに含めるメディア・アクセス・プロシージャのソースを作成できます。最後に、メディア・アクセス・プロシージャを作成した後、特定のアプリケーション要件を満たすようにカスタマイズできます。

これらのプロセスは、Oracle Multimedia PL/SQL Web Toolkitフォト・アルバム・アプリケーションがinsert_new_photoプロシージャをイメージ・アップロード・プロシージャとして使用し、deliver_mediaプロシージャをイメージ取得プロシージャとして使用する方法と同様です。

次の項では、Code Wizardアプリケーションの使用方法について説明します。

4.2.1 新しいDADの作成または既存のDADの選択

メディアのアップロードまたは取得プロシージャを作成するには、Code Wizardで使用する1つ以上のデータベース・アクセス記述子(DAD)を選択する必要があります。スキーマ表が不正に参照されたり、メディア・アクセス・プロシージャが不正に作成されることを防ぐために、Code Wizardの管理機能を使用して各DADを認可する必要があります。

データベースおよびアプリケーションのセキュリティ要件に応じて、Code Wizard専用の新規DADを1つ以上作成して認可できます。または、既存の1つ以上のDADの使用を認可できます。

Code Wizardでの使用を認可したDADには、なんらかのユーザー認証方式を採用することをお薦めします。最も簡単な方法は、データベース認証を使用するDADを作成または使用することです。この方法を行うには、DAD仕様で「Basic Authentication Mode」を選択し、パスワードを空白のままにします。または、既存のアプリケーション固有の認証方式を指定したDADを使用することもできます。

次の例では、SCOTTスキーマのメディア・アップロードおよび取得プロシージャを作成およびテストできるDADの作成方法について説明します。

注意:

メディア・アップロード・プロシージャをテストするには、DADでドキュメント表の名前を指定する必要があります。アップロード・プロシージャをテストする場合は、プロシージャの作成に使用したDADまたはアプリケーションへのアクセスに使用したDADを選択できます。DADを作成するときにドキュメント表名を選択するか、後でDADを編集してドキュメント表名を指定するか、またはドキュメント表名を指定する既存のDADを使用するかを選択できます。この例では、DADの作成時にドキュメント表名を指定する方法を示します。

  1. Webブラウザで、Oracle HTTP Serverのホームページを開きます。「管理」ページで「PL/SQLのプロパティ」を選択して、mod_plsqlの「サービス」ページを開きます。
  2. mod_plsqlサービス・ページで、DAD Statusセクションまでスクロールします。次に、「作成」をクリックして「DADタイプ」ページを開きます。
  3. DADタイプとして「一般」を選択します。その後、「次」をクリックして「データベース接続」ページを開きます。
  4. 「DAD名」フィールドに/scottcwと入力します。データベース・アカウントにSCOTTと入力し、パスワードは空白にします。「Database Connectivity Information」セクションに、接続情報を入力します。「デフォルト・ページ」フィールドにORDCWPKG.MENUと入力し、他のフィールドは空白のままにします。その後、「次」をクリックしてドキュメント、別名およびセッション・ページを開きます。
  5. ドキュメント、別名およびセッション・ページで、「ドキュメント表」にMEDIA_UPLOAD_TABLEと入力します。さらに、「適用」をクリックします。
  6. 変更内容を有効にするために、Oracle HTTP Serverを再起動します。

関連項目:

DADの構成の詳細は、『Oracle Database開発ガイド』を参照してください

4.2.2 DADの認可

Code Wizardを使用するには、最初にデータベース・アクセス記述子(DAD)を認可する必要があります。

DADをCode Wizardで使用するように認可するには、次の手順を実行します。

  1. Code Wizardの管理URLをブラウザのアドレス・バーに入力します。例:
    http://<host-name>:<port-number>/ordcwadmin
    
  2. ブラウザの表示に従って、ユーザー名およびパスワードを入力します。
  3. 次の図に示すとおり、「Main menu」「DAD authorization」を選択します。その後、「Next」をクリックします。

    図4-1 Code Wizardの「Main Menu」

    図4-1の説明が続きます
    「図4-1 Code Wizardの「Main Menu」」の説明
  4. 次の図に示すように、認可するDADの名前をユーザー名とともに入力します。その後、「Apply」をクリックします。

    図4-2 SCOTTCW DADの認可

    図4-2の説明が続きます
    「図4-2 SCOTTCW DADの認可」の説明

    注意:

    重複するDADは許可されず、認可された各DADは、ユーザーがDADを使用してCode Wizardでアクセスすることを認可されているデータベース・スキーマを示す必要があります。この同じページを使用して、Code Wizardが不要になった既存のDADの認可を削除できます。

  5. 次の図に示すように、Oracle Multimedia Code Wizardでの使用を認可された更新後のDADの一覧を確認します。その後、「Done」をクリックします。

    図4-3 認可済のDAD一覧

    図4-3の説明が続きます
    「図4-3 認可済のDAD一覧」の説明
  6. ログアウト(HTTP認証情報をクリア)するには、「Main menu」「Logout」を選択し、「Next」をクリックします。ログアウト操作のリクエストが、PL/SQL Gatewayの組込みファンクションlogmeoffに送信されます。

関連項目:

DADの構成の詳細は、『Oracle Database開発ガイド』を参照してください

4.2.3 メディアのアップロード・プロシージャおよび取得プロシージャの作成およびテスト

データベース・アクセス記述子(DAD)を指定して認証すると、このアプリケーションを実行してメディアのアップロードおよび取得プロシージャを作成する準備ができます。

すべての設定作業が完了した後にCode Wizardを起動するには、次の手順に従います。

  1. Webブラウザのアドレス・フィールドに適切なURLを入力します。

    次に例を示します。

    http://<hostname>:<port-number>/scottcw

    または

    http://<hostname>:<port-number>/mediadad/ordcwpkg.menu

  2. ブラウザの表示に従って、ユーザー名およびパスワードを入力します。次の図に示すとおり、Oracle Multimedia Code Wizard for the PL/SQL Gatewayの「Main menu」ページが表示されます。

    図4-4 SCOTTCW DADの使用

    図4-4の説明が続きます
    「図4-4 SCOTTCW DADの使用」の説明
  3. DADがCode Wizard専用に構成されている場合は、DAD名を入力します。別のDADを使用するには、DAD名の後に、Code Wizardパッケージ名とMain menuプロシージャ名(ORDCWPKG.MENU)を入力します。
  4. ログイン後に、「Main menu」「Logout」を選択し、「Next」をクリックしていつでもログアウト(HTTP認証情報をクリア)できます。ログアウト操作のリクエストが、PL/SQL Gatewayの組込みファンクションlogmeoffに送信されます。

メディア・アップロード・プロシージャまたはメディア取得プロシージャを作成するには、「Main menu」ページで適切なオプションを選択し、「Next」をクリックします。Code Wizardに表示される手順に従って、プロシージャを作成できます。

スタンドアロンのメディア・アップロードまたは取得プロシージャを作成する場合は、プロシージャのコンテンツを表示してテストできます。

関連項目:

埋込みPL/SQL Gatewayの使用の詳細は、『Oracle Database開発ガイド』を参照してください

4.2.4 メディアのアップロード・プロシージャの作成

Oracle Multimedia Code Wizard for the PL/SQL Gatewayを使用してメディアのアップロード・プロシージャを作成するには、このプロセスを実行します。

  1. 図4-5に示すとおり、「Main menu」「Create media upload procedure」を選択します。その後、「Next」をクリックします。

    図4-5 メディアのアップロード・プロシージャの作成

    図4-5の説明が続きます
    「図4-5 メディアのアップロード・プロシージャの作成」の説明
  2. 図4-6に示すとおり、「Step 1: Select database table and procedure type」「PHOTOS」および「Standalone procedure」を選択します。その後、「Next」をクリックします。

    図4-6 メディア・アップロード手順1: データベース表およびプロシージャ・タイプの選択

    図4-6の説明が続きます
    「図4-6 メディア・アップロード手順1: データベース表およびプロシージャ・タイプの選択」の説明
  3. 図4-7に示すとおり、「Step 2: Select PL/SQL Gateway document upload table」「Use existing document table」を選択します。これは、SCOTTCW DADがこのドキュメント表を使用するように設定されているためです。その後、「Next」をクリックします。

    図4-7 メディア・アップロード手順2: PL/SQL Gatewayドキュメント・アップロード表の選択

    図4-7の説明が続きます。
    「図4-7 メディア・アップロード手順2: PL/SQL Gatewayドキュメント・アップロード表の選択」の説明
  4. 図4-8に示すとおり、「Step 3: Select data access and media column(s)」「PHOTO (ORDIMAGE)」「ID (Primary key)」および「Conditional insert or update」を選択します。その後、「Next」をクリックします。

    図4-8 メディア・アップロード手順3: データ・アクセスおよびメディア列の選択

    図4-8の説明が続きます。
    「図4-8 メディア・アップロード手順3: データ・アクセスおよびメディア列の選択」の説明
  5. 図4-9に示すとおり、「Step 4: Select additional columns and procedure name」で、「DESCRIPTION」を選択し、デフォルトのプロシージャ名「UPLOAD_PHOTOS_PHOTO」を受け入れて、「Create procedure in the database」を選択します。その後、「Next」をクリックします。

    図4-9 メディア・アップロード手順4: 追加の列およびプロシージャ名の選択

    図4-9の説明が続きます
    「図4-9 メディア・アップロード手順4: 追加の列およびプロシージャ名の選択」の説明
  6. 図4-10に示すとおり、「Step 5: Review selected options」で選択したオプションを確認します。正しいオプションが選択されている場合、「Finish」をクリックします。

    図4-10 メディア・アップロード手順5: 選択したオプションの確認

    図4-10の説明が続きます
    「図4-10 メディア・アップロード手順5: 選択したオプションの確認」の説明
  7. 図4-11に示すとおり、メッセージ「Procedure created successfully: UPLOAD_PHOTOS_PHOTO」が「Compile procedure and review generated source」ページに表示されます。

    図4-11 成功メッセージが表示されたコンパイル済アップロード・プロシージャ

    図4-11の説明が続きます
    「図4-11 成功メッセージが表示されたコンパイル済アップロード・プロシージャ」の説明

    コンパイルされたPL/SQLソース・コードを別のウィンドウに表示するには、「View」をクリックします。SCOTTCW DADを構成し、ドキュメント表にMEDIA_UPLOAD_TABLEを指定した場合、「DAD: 」フィールドにデフォルトでDAD名scottcwが表示されます。

    作成したPL/SQLプロシージャをテストするには、「Test」をクリックします。

    別のウィンドウに「Oracle Multimedia Code Wizard: Template Upload Form」が表示されます。

  8. 「Oracle Multimedia Code Wizard: Template Upload Form」ウィンドウの「ID」フィールドに値1を入力します。図4-12に示すとおり、「Browse...」をクリックして「PHOTO」フィールドでアップロードするイメージを探して選択し、アップロードするイメージの簡単な説明を「DESCRIPTION」フィールドに入力します。次に、「Upload media」をクリックします。

    図4-12 Code Wizardの「Template Upload」フォーム

    図4-12の説明が続きます
    「図4-12 Code Wizardの「Template Upload」フォーム」の説明

    イメージが表の行にアップロードされ、次のメッセージが表示されます。

    Media uploaded successfully.

  9. 「Compile procedure and review generated source」ページに戻ります。テストを終了する場合、「Done」をクリックして「Main menu」ページに戻ります。

4.2.5 メディアの取得プロシージャの作成

Oracle Multimedia Code Wizard for the PL/SQL Gatewayを使用してメディアの取得プロシージャを作成するには、このプロセスを実行します。

  1. 図4-13に示すとおり、「Main menu」「Create media retrieval procedure」を選択します。その後、「Next」をクリックします。

    図4-13 メディアの取得プロシージャの作成

    図4-13の説明が続きます
    「図4-13 メディアの取得プロシージャの作成」の説明
  2. 図4-14に示すとおり、「Step 1: Select database table and procedure type」「PHOTOS」および「Standalone procedure」を選択します。その後、「Next」をクリックします。

    図4-14 メディア取得手順1: データベース表およびプロシージャ・タイプの選択

    図4-14の説明が続きます
    「図4-14 メディア取得手順1: データベース表およびプロシージャ・タイプの選択」の説明
  3. 図4-15に示すとおり、「Step 2: Select media column and key column」「PHOTO (ORDIMAGE)」および「ID (Primary key)」を選択します。その後、「Next」をクリックします。

    図4-15 メディア取得手順2: メディア列およびキー列の選択

    図4-15の説明が続きます
    「図4-15 メディア取得手順2: メディア列およびキー列の選択」の説明
  4. 図4-16に示すとおり、「Step 3: Select procedure name and parameter name」で、デフォルトのプロシージャ名「GET_PHOTOS_PHOTO」、デフォルトのパラメータ名「MEDIA_ID」および「Create procedure in the database」を受け入れます。その後、「Next」をクリックします。

    図4-16 メディア取得手順3: プロシージャ名およびパラメータ名の選択

    図4-16の説明が続きます
    「図4-16 メディア取得手順3: プロシージャ名およびパラメータ名の選択」の説明
  5. 図4-17に示すとおり、「Step 4: Review Selected Options」で選択したオプションを確認します。正しいオプションが選択されている場合、「Finish」をクリックします。

    図4-17 メディア取得手順4: 選択したオプションの確認

    図4-17の説明が続きます
    「図4-17 メディア取得手順4: 選択したオプションの確認」の説明
  6. 図4-18に示すとおり、メッセージ「Procedure created successfully: GET_PHOTOS_PHOTO」が「Compile procedure and review generated source」ページに表示されます。

    図4-18 成功メッセージが表示されたコンパイル済取得プロシージャ

    図4-18の説明が続きます
    「図4-18 成功メッセージが表示されたコンパイル済取得プロシージャ」の説明

    コンパイル済のPL/SQLソース・コードを別のウィンドウで確認するには、「View」をクリックします。

    作成したPL/SQLプロシージャをテストするには、ID値1を指定してイメージをデータベースにロードしている場合は、「Key parameter (MEDIA_ID)」に値1を入力し、「Test」をクリックします。

    表の行からイメージが取得され、別のウィンドウに表示されます。

  7. 「Done」をクリックして「Main menu」ページに戻ります。

4.2.6 PL/SQL Gatewayドキュメント表の使用

PL/SQL Gatewayを使用してアップロードしたすべてのファイルは、ドキュメント表に格納されます。Code Wizardによって作成されたメディアのアップロード・プロシージャは、アップロードされたイメージを、指定されたドキュメント表からアプリケーションの表に自動的に移動します。別のアプリケーション・コンポーネントが使用しているドキュメント表に、一時ファイルが一時的に表示されないようにするには、ドキュメントの永続的な格納に使用されていないドキュメント表を使用します。

選択したドキュメント表は、アプリケーションのデータベース・アクセス記述子(DAD)に指定します。DADに別のドキュメント表が指定されている場合、メディアのアップロード・プロシージャ用の新しいDADを作成します。新しいドキュメント表の作成を選択した場合、Code Wizardによって次の形式の表が作成されます。

CREATE TABLE document-table-name
  ( name           VARCHAR2(256) UNIQUE NOT NULL,
    mime_type      VARCHAR2(128),
    doc_size       NUMBER,
    dad_charset    VARCHAR2(128),
    last_updated   DATE,
    content_type   VARCHAR2(128),
    blob_content   BLOB )
-- 
-- store BLOBs as SecureFiles LOBs
-- 
LOB(blob_content)  STORE AS SECUREFILE;

関連項目:

ファイルのアップロードとドキュメント表の詳細は、『Oracle Database開発ガイド』を参照してください

4.2.7 タイムゾーン情報を使用したブラウザでのキャッシュのサポート

ブラウザでWebサーバーから受信したリソースをキャッシュし、それらのリソースを後続のリクエストへのレスポンスに使用すると、ユーザーへのレスポンス時間が短縮され、ネットワーク・トラフィックを軽減できます。この項では、ブラウザのキャッシュ・メカニズムの動作方法と、Code Wizardユーティリティ・パッケージを使用してこのメカニズムをサポートする方法についておおまかに説明します。この項の説明では、すべてのHTTPの日時スタンプを協定世界時(UTC)で表します。

すべてのHTTPレスポンスには、レスポンスが生成された日時を示すDateヘッダーが含まれます。Webサーバーがブラウザからのリクエストに対してリソースを送信する場合、リクエストされたリソースの最終変更日時を示すLast-Modified HTTPレスポンス・ヘッダーも含めることができます。Last-ModifiedヘッダーはDateヘッダーよりもにならないようにする必要があります。

リソースを受信してキャッシュした後、同じリソースをブラウザで再度取得する必要がある場合、ブラウザは、リソースが前回取得およびキャッシュされたときにアプリケーション・サーバーから返されたLast-Modified日付の値をIf-Modified-Sinceリクエスト・ヘッダー指定して、リクエストをWebサーバーに送信します。このリクエストを受信したWebサーバーは、If-Modified-Sinceリクエスト・ヘッダーの日付をリソースの最終更新時刻と比較します。リソースがまだ存在し、ブラウザでキャッシュされた後に変更されていない場合、Webサーバーは、レスポンス本文なしのHTTP 304 Not Modifiedステータスで応答し、現在キャッシュに格納されているリソースをブラウザが使用できることを示します。また、リソースがまだ存在し、リクエストにIf-Modified-Sinceヘッダーが含まれていないかリソースがブラウザでキャッシュされた後に更新されている場合、WebサーバーはHTTP 200 OKステータスで応答し、リソースをブラウザに送信します。

ORDImage、ORDAudio、ORDVideoおよびORDDocのすべてのオブジェクトには、埋込みORDSourceオブジェクトにDATEとして格納されたupdateTime属性があります。DATEデータ型ではタイム・ゾーンまたは夏時間がサポートされませんが、Oracle Databaseはタイム・ゾーンをサポートし、データベースに格納されたDATE値をUTCに変換するファンクションも提供しています。

レスポンスが最初にブラウザに返されるときに、メディア取得プロシージャはupdateTime属性に基づいてLast-Modified HTTPレスポンス・ヘッダーを設定します。メディア・データのリクエストにIf-Modified-Sinceヘッダーが含まれる場合、メディア取得プロシージャは値をupdateTime属性と比較し、適切なレスポンスを返します。ブラウザのキャッシュ内のリソースがまだ有効な場合は、レスポンス本文なしでHTTP 304 Not Modifiedステータスが返されます。ブラウザによってキャッシュされた後にリソースが更新されている場合は、レスポンス本文としてHTTP 200 OKステータスがメディア・リソースとともに返されます。Code Wizardによって作成されたメディア取得プロシージャは、ユーティリティ・パッケージをコールして、データベースに格納されているDATE値をUTCに変換します。ユーティリティ・パッケージは、Oracle Databaseに格納されているタイム・ゾーン情報とdateおよびtimeファンクションを使用して、データベースの日時スタンプをUTCに変換します。結果の日付が前に説明したLast-Modified日付のルールに準拠するようにするには、タイム・ゾーン情報が正しく指定されている必要があります。

関連項目:

4.3 サンプル・セッション: イメージの使用

このサンプル・セッションでは、SCOTTスキーマを使用して、イメージ・メディアのアップロード・プロシージャおよび取得プロシージャを作成する方法を示します。別のスキーマを使用するには、別のスキーマ名とパスワードで置換します。また、SCOTTスキーマのパスワードを変更した場合は、その新しいパスワードを使用します。

次の手順を実行します。

手順1.表を作成する権限でスキーマに接続した後にアプリケーションのイメージを格納する表を作成します。

次に例を示します。

SQL> CREATE TABLE cw_images_table( id NUMBER PRIMARY KEY,
                                  description VARCHAR2(30) NOT NULL,
                                  location VARCHAR2(30),
                                  image ORDSYS.ORDIMAGE )
--
-- store media as SecureFiles LOBs
--
LOB(image.source.localdata)  STORE AS SECUREFILE;
手順2.プロシージャの作成に使用するSCOTTCW DADを作成します。
  1. Webブラウザで、Oracle HTTP Serverのホームページを開きます。「管理」ページで「PL/SQLのプロパティ」を選択して、mod_plsqlの「サービス」ページを開きます。

  2. mod_plsqlサービス・ページで、DAD Statusセクションまでスクロールします。次に、「作成」をクリックして「DADタイプ」ページを開きます。

  3. DADタイプとして「一般」を選択します。その後、「次」をクリックして「データベース接続」ページを開きます。

  4. 「DAD名」フィールドに/scottcwと入力します。データベース・アカウントにSCOTTと入力し、パスワードは空白にします。「Database Connectivity Information」セクションに、接続情報を入力します。「デフォルト・ページ」フィールドにORDCWPKG.MENUと入力し、他のフィールドは空白のままにします。その後、「次」をクリックしてドキュメント、別名およびセッション・ページを開きます。

  5. ドキュメント、別名およびセッション・ページで、「ドキュメント表」にMEDIA_UPLOAD_TABLEと入力します。次に「適用」をクリックします。

  6. 変更内容を有効にするために、Oracle HTTP Serverを再起動します。

手順3.Code WizardでSCOTTCW DADおよびSCOTTスキーマの使用を認可します。
  1. Code Wizardの管理URLをブラウザのアドレス・バーに入力し、ブラウザの表示に従ってORDSYSユーザー名およびパスワードを入力します。次に例を示します。

    http://<hostname>:<port-number>/ordcwadmin
    
  2. Code Wizardの「Main menu」でDAD認可ファンクションを選択し、「Next」をクリックします。デモDADの名前SCOTTCW、およびユーザー名SCOTTを入力し、「Apply」をクリックします。確認ウィンドウが表示されたら、「Done」をクリックします。

手順4.DADをSCOTTCW DADに変更します。
  1. Code Wizardの「Main menu」で「Change DAD」をクリックします。

  2. Change to SCOTTCW」が選択されていない場合はそれをクリックし、「Next」をクリックします。

  3. ユーザー名とパスワードを求められたら、ユーザー名SCOTTおよびそのパスワードを入力し、「OK」をクリックします。

    Main menu」に、現行DADとしてSCOTTCW、現行スキーマとしてSCOTTが表示されます。

手順5.メディアのアップロード・プロシージャを作成およびテストします。

Main menu」で「Create media upload procedure」をクリックし、「Next」をクリックします。

  1. データベース表およびプロシージャ・タイプを選択します。

    1. CW_IMAGES_TABLE」データベース表をクリックします。

    2. Standalone procedure」をクリックします。

    3. Next」をクリックします。

  2. PL/SQLドキュメント・アップロード表を選択します。

    SCOTTスキーマにドキュメント表が存在しない場合、Code Wizardにその旨を示すメッセージが表示されます。この場合、表示されているデフォルトの表名CW_SAMPLE_UPLOAD_TABLEを受け入れて、「Next」をクリックします。

    既存のドキュメント表にCW_SAMPLE_UPLOAD_TABLEが含まれていない場合、「Create new document table」をクリックし、表示されているデフォルトの表名CW_SAMPLE_UPLOAD_TABLEを受け入れて、「Next」をクリックします。

    CW_SAMPLE_UPLOAD_TABLEドキュメント表が存在する場合、「Use existing document table」および「CW_SAMPLE_UPLOAD_TABLE」オプションが選択されていることを確認します。「Next」をクリックします。

  3. データ・アクセスおよびメディア列を選択します。

    1. IMAGE (ORDIMAGE)」をクリックします。

    2. ID (Primary key)」をクリックします。

    3. Conditional insert or update」をクリックします。

    4. 「Next」をクリックします。

  4. 追加の列およびプロシージャ名を選択します。

    1. DESCRIPTION列にはNOT NULL制約が定義されているため、「DESCRIPTION」が選択されていることを確認します。(LOCATION列には制約がないため、デフォルトではチェックされていません。)

    2. 表示されているプロシージャ名「UPLOAD_CW_IMAGES_TABLE_IMAGE」を受け入れます。

    3. Create procedure in the database」をクリックします。

    4. 「Next」をクリックします。

  5. 選択したプロシージャ作成オプションを確認します。次のとおり表示されます。

    Procedure type:        Standalone
    Table name:            CW_IMAGES_TABLE
    Media column(s):       IMAGE (ORDIMAGE)
    Key column:            ID
    Additional column(s):  DESCRIPTION
    Table access mode:     Conditional update or insert
    Procedure name:        UPLOAD_CW_IMAGES_TABLE_IMAGE
    Function:              Create procedure in the database
    

    Finish」をクリックします。

  6. プロシージャをコンパイルし、生成されたソース情報を確認します。

    Code Wizardに次のメッセージが表示されます。

    Procedure created successfully: UPLOAD_CW_IMAGES_TABLE_IMAGE
    
    1. オプションの「Click to display generated source:」で「View」をクリックし、生成されたソースを別のウィンドウに表示します。生成されたソースを、手順5の6gの最後に示します。

    2. 生成されたソースを確認したら、ウィンドウを閉じます。

    3. DAD:」に表示されている「SCOTTCW」を受け入れて、「Test」をクリックします。生成されたプロシージャのテストに使用するテンプレート・ファイル・アップロード・フォームが別のウィンドウに表示されます

    4. テンプレート・ファイル・アップロード・フォームをカスタマイズするには、ブラウザの「ファイル」メニューから「名前を付けて保存...」を選択して、編集用にHTMLソースを保存します。

    5. テンプレート・ファイル・アップロード・フォームをテストするには、次の情報を入力します。

      • ID列用に、行の主キーとして数値1を入力します。

      • IMAGE列用に、「Browse...」をクリックして、 データベースにアップロードするイメージ・ファイルを選択します。

      • DESCRIPTION列用に、イメージの簡単な説明を入力します。

      • Upload media」をクリックします。

      Code Wizardによって、「Oracle Multimedia Code Wizard: Template Upload Procedure」という見出しのテンプレート完了ウィンドウが表示されます。プロシージャが正常に実行された場合、メッセージ「Media uploaded successfully」が表示されます。

    6. ウィンドウを閉じます。

    7. Compile procedure and review generated source」ウィンドウの「Done」をクリックして、Code Wizardの「Main menu」に戻ります。

    生成されたイメージ・アップロード・プロシージャのコピーを次に示します。

    CREATE OR REPLACE PROCEDURE UPLOAD_CW_IMAGES_TABLE_IMAGE
      ( in_ID IN VARCHAR2,
        in_IMAGE IN VARCHAR2 DEFAULT NULL,
        in_DESCRIPTION IN VARCHAR2 DEFAULT NULL )
    AS
      local_IMAGE ORDSYS.ORDIMAGE := ORDSYS.ORDIMAGE.init();
      local_ID CW_IMAGES_TABLE.ID%TYPE := NULL;
      upload_size     INTEGER;
      upload_mimetype VARCHAR2( 128 );
      upload_blob     BLOB;
    BEGIN
      --
      -- Update the existing row.
      --
      UPDATE CW_IMAGES_TABLE mtbl
        SET mtbl.IMAGE = local_IMAGE,
            mtbl.DESCRIPTION = in_DESCRIPTION
        WHERE mtbl.ID = in_ID
        RETURN mtbl.ID INTO local_ID;
      --
      -- Conditionally insert a new row if no existing row is updated.
      --
      IF local_ID IS NULL
      THEN
        --
        -- Insert the new row into the table.
        --
        INSERT INTO CW_IMAGES_TABLE ( ID, IMAGE, DESCRIPTION )
          VALUES ( in_ID, local_IMAGE, in_DESCRIPTION );
      END IF;
      --
      -- Select Oracle Multimedia object(s) for update.
      --
      SELECT mtbl.IMAGE INTO local_IMAGE
        FROM CW_IMAGES_TABLE mtbl WHERE mtbl.ID = in_ID FOR UPDATE;
      --
      -- Store media data for the column in_IMAGE.
      --
      IF in_IMAGE IS NOT NULL
      THEN
        SELECT dtbl.doc_size, dtbl.mime_type, dtbl.blob_content INTO
               upload_size, upload_mimetype, upload_blob
          FROM CW_IMAGE_UPLOAD_TABLE dtbl WHERE dtbl.name = in_IMAGE;
        IF upload_size &gt; 0
        THEN
          dbms_lob.copy( local_IMAGE.source.localData, 
                         upload_blob, 
                         upload_size );
          local_IMAGE.setLocal();
          BEGIN
            local_IMAGE.setProperties();
          EXCEPTION
            WHEN OTHERS THEN
              local_IMAGE.contentLength := upload_size;
              local_IMAGE.mimeType := upload_mimetype;
          END;
        END IF;
        DELETE FROM CW_IMAGE_UPLOAD_TABLE dtbl WHERE dtbl.name = in_IMAGE;
      END IF;
      --
      -- Update Oracle Multimedia objects in the table.
      --
      UPDATE CW_IMAGES_TABLE mtbl
        SET mtbl.IMAGE = local_IMAGE
        WHERE mtbl.ID = in_ID;
      --
      -- Display the template completion message.
      --
      htp.print( '&lt;html&gt;' );
      htp.print( '&lt;title&gt;Oracle Multimedia Code Wizard: Template Upload
    Procedure&lt;/title&gt;' );
      htp.print( '&lt;body&gt;' );
      htp.print( '&lt;h2&gt; Oracle Multimedia Code Wizard:
    Template Upload Procedure&lt;/h2&gt;' );
      htp.print( 'Media uploaded successfully.' );
      htp.print( '&lt;/body&gt;' );
      htp.print( '&lt;/html&gt;' );
    END UPLOAD_CW_IMAGES_TABLE_IMAGE;
    

    前のイメージ・アップロード・プロシージャで宣言される入力パラメータおよび変数を次に示します。

    1. このプロシージャの宣言部では、in_IDin_IMAGEおよびin_DESCRIPTIONの3つの入力パラメータが宣言され、先頭以外の2つのパラメータがNULLに初期化されます。

    2. サブプログラム・セクションでは、次の変数が宣言されます。

      • 変数local_IMAGEにはORDSYS.ORDIMAGEデータ型が割り当てられ、ORDIMAGE.init( )メソッドによって空のBLOBで初期化されます。

      • 変数local_IDは、表CW_IMAGES_TABLEID列と同じデータ型を取り、NULLに初期化されます。

      • 追加の3つの変数upload_sizeupload_mimetypeおよびupload_blobが宣言されます。これらの変数には、後で、イメージのBLOBデータのコンテンツをORDSYS.ORDIMAGE.source.localData属性にコピーする準備として、SELECT文によってドキュメント表CW_IMAGE_UPLOAD_TABLEの対応する列名doc_sizemime_typeおよびblob_contentから値が割り当てられます。

    外側のBEGIN...END実行文部は、次の操作を実行します。

    1. CW_IMAGES_TABLE表で既存の行のIMAGE列およびDESCRIPTION列を更新し、ID列の値がin_ID入力パラメータの値と一致するlocal_IDの値を戻します。

    2. 戻されたlocal_IDの値がNULLである場合、条件付きで新しい行を表CW_IMAGES_TABLEに挿入し、image 列内のORDImageオブジェクト型のインスタンスを空のBLOBで初期化します。

    3. CW_IMAGES_TABLEで、ID列の値がin_ID入力パラメータの値と一致するORDImageオブジェクト列IMAGEを更新対象として選択します。

    4. ドキュメント表で、Name列の値がin_IMAGE入力パラメータの値と一致する行を選択し、その行のdoc_sizemime_typeおよびblob_content列の値をupload_sizeupload_mimetypeおよびupload_blob変数に渡します。

    5. DBMS_LOBによって、BLOBデータを表CW_IMAGE_UPLOAD_TABLEからORDSYS.ORDIMAGE.source.localData属性にコピーし、setLocal( )メソッドをコールして、イメージ・データがBLOBでローカルに格納されていることを示し、ORDImageメソッドはsource.localData属性内で対応するデータを検索する必要があることを示します。

    6. 内側の実行ブロックでは、ORDImageのsetProperties( )メソッドをコールして、イメージ・データを読み取り、オブジェクトの属性値を取得し、それらの値をORDImagオブジェクトのイメージ・オブジェクト属性に格納します。

    7. setProperties( )コールが正常に実行されなかった場合、例外を捕捉し、contentLength( )メソッドをコールしてイメージのサイズを取得し、mimeType( )メソッドをコールしてイメージのMIMEタイプを取得します。

    8. CW_IMAGES_TABLEで、Name列の値がin_IMAGE入力パラメータの値と一致する行にコピーされたデータを含む行を、ドキュメント表CW_IMAGE_UPLOAD_TABLEから削除します。

    9. CW_IMAGES_TABLEのORDImageオブジェクトのIMAGE列を、ID列の値がin_ID入力パラメータの値と一致する変数local_IMAGEのコンテンツで更新します。

    10. PL/SQL Web Toolkitのhtp.printファンクションを使用して、メディアが正常にアップロードされた旨を示す完了メッセージをHTMLページに表示します。

手順6.メディアの取得プロシージャを作成およびテストします。

Main menu」で「Create media retrieval procedure」を選択し、「Next」をクリックします。

  1. データベース表およびプロシージャ・タイプを選択します。

    1. CW_IMAGES_TABLES」をクリックします。

    2. 「Standalone procedure」をクリックします。

    3. 「Next」をクリックします。

  2. メディア列およびキー列を選択します。

    1. 「IMAGE (ORDIMAGE)」をクリックします。

    2. ID (Primary key)」をクリックします。

    3. 「Next」をクリックします。

  3. プロシージャ名およびパラメータ名を選択します。

    1. 表示されているプロシージャ名「GET_CW_IMAGES_TABLE_IMAGE」を受け入れます。

    2. 表示されているパラメータ名「MEDIA_ID」を受け入れます。

    3. Create procedure in the database」をクリックします。

    4. 「Next」をクリックします。

  4. 選択したプロシージャ作成オプションを確認します。次のとおり表示されます。

  5. Procedure type:        Standalone
    Table name:            CW_IMAGES_TABLE
    Media column(s):       IMAGE (ORDIMAGE)
    Key column:            ID
    Procedure name:        GET_CW_IMAGES_TABLE_IMAGE
    Parameter Name:        MEDIA_ID
    Function:              Create procedure in the database
    

    「Next」をクリックします。

  6. プロシージャをコンパイルし、生成されたソースを確認します。

    Code Wizardに次のメッセージが表示されます。

    Procedure created successfully: GET_CW_IMAGES_TABLE_IMAGE
    
    1. View」をクリックして、生成されたソースを別のウィンドウに表示します。生成されたソースを確認したら、ウィンドウを閉じます。生成されたソースを、手順6の5eの最後に示します。

    2. GET_CW_IMAGES_TABLE_IMAGEプロシージャを使用したイメージの取得に使用するURL形式を確認します。

    3. 「Key parameter」に数値1を入力し、「Test」をクリックして、前にアップロードしたイメージを取得することでプロシージャをテストします。

      取得されたイメージが別のウィンドウに表示されます。

    4. ウィンドウを閉じます。

    5. Done」をクリックして「Main menu」に戻ります。

    生成されたイメージ取得プロシージャを次に示します。

    CREATE OR REPLACE PROCEDURE GET_CW_IMAGES_TABLE_IMAGE (
     MEDIA_ID IN VARCHAR2 )
    AS
      localObject ORDSYS.ORDIMAGE;
      localBlob  BLOB;
      localBfile BFILE;
      httpStatus NUMBER;
      lastModDate VARCHAR2(256);
    BEGIN
      --
      -- Retrieve the object from the database into a local object.
      --
      BEGIN
        SELECT mtbl.IMAGE INTO localObject FROM CW_IMAGES_TABLE mtbl
          WHERE mtbl.ID = MEDIA_ID;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          ordplsgwyutil.resource_not_found( 'MEDIA_ID', MEDIA_ID );
          RETURN;
      END;
    
      --
      -- Check the update time if the browser sent an If-Modified-Since header.
      --
      IF ordplsgwyutil.cache_is_valid( localObject.getUpdateTime() )
      THEN
        owa_util.status_line( ordplsgwyutil.http_status_not_modified );
        RETURN;
      END IF;
    
      --
      -- Figure out where the image is.
      --
      IF localObject.isLocal() THEN
        --
        -- Data is stored locally in the localData BLOB attribute.
        --
        localBlob := localObject.getContent();
        owa_util.mime_header( localObject.getMimeType(), FALSE );
        ordplsgwyutil.set_last_modified( localObject.getUpdateTime() );
        owa_util.http_header_close();
        IF owa_util.get_cgi_env( 'REQUEST_METHOD' ) &lt;&gt; 'HEAD' THEN
          wpg_docload.download_file( localBlob );
        END IF;
      ELSIF UPPER( localObject.getSourceType() ) = 'FILE' THEN
    
        --
        -- Data is stored as a file from which ORDSource creates 
        -- a BFILE.
        --
        localBfile  := localObject.getBFILE();
        owa_util.mime_header( localObject.getMimeType(), FALSE );
        ordplsgwyutil.set_last_modified( localObject.getUpdateTime() );
        owa_util.http_header_close();
        IF owa_util.get_cgi_env( 'REQUEST_METHOD' ) &lt;&gt; 'HEAD' THEN
          wpg_docload.download_file( localBfile );
        END IF;
    
      ELSIF UPPER( localObject.getSourceType() ) = 'HTTP' THEN    --
        -- The image is referenced as an HTTP entity, so we have to 
        -- redirect the client to the URL that ORDSource provides.
        --
        owa_util.redirect_url( localObject.getSource() );
      ELSE
        --
        -- The image is stored in an application-specific data
        -- source type for which no default action is available.
        --
        NULL;
      END IF;
    END GET_CW_IMAGES_TABLE_IMAGE;
    

    前に示したイメージ取得プロシージャで宣言される入力パラメータおよび変数を次に示します。

    1. このプロシージャの宣言部では、1つの入力パラメータMEDIA_IDが宣言されます。

    2. サブプログラム・セクションでは、次の変数が宣言されます。

      • 変数localObjectには、ORDSYS.ORDIMAGEデータ型が割り当てられます。

      • 変数localBlobのデータ型はBLOB、変数localBfileはBFILE、httpStatusはNUMBER、およびlastModDateは最大256文字のVARCHAR2です。

    外側のBEGIN...END実行文部は、次の操作を実行します。

    1. CW_IMAGES_TABLEで、ID列の値がMEDIA_ID入力パラメータの値と一致するORDImageオブジェクト列IMAGEを選択します。

    2. 内側の実行ブロックでデータが検出されない場合、例外が発生し、PL/SQL Gatewayのresource_not_foundファンクションをコールしてMEDIA_ID入力パラメータの値を取得します。

    3. ブラウザがIf-Modified-Sinceヘッダーを送信した場合、PL/SQL Gatewayのcache_is_validファンクションに渡されたgetUpdateTime( )メソッドをコールして、更新時刻を確認します。

    4. キャッシュが有効である場合、PL/SQL Web Toolkitのowa_utilパッケージのstatus_lineプロシージャを使用してhttp_status_not_modifiedファンクションへコールを渡し、HTTPステータス・コードをクライアントに送信します。

    5. ORDImageのisLocal( )メソッドをコールして、イメージ・データが格納されている位置を判断します。このメソッドは、イメージ・データがBLOBでローカルに格納されている場合はtrueを戻します。この場合、ローカルのBLOBの処理を有効にします。

      • 値がtrueの場合、変数localBlobにORDImageのgetContent( )メソッドを割り当て、イメージ・データを含むローカルのBLOBを操作できるようにします。

      • ORDImageのgetMimeType( )メソッドをコールして、イメージのMIMEタイプを判断し、このタイプをowa_util.mime_headerプロシージャに渡してHTTPヘッダーをオープンしたままにします。

      • ORDImageのgetUpdateTime( )メソッドをコールして、イメージの最終変更時刻を取得し、その時刻をordplsgwyutil.set_last_modifiedプロシージャに渡します。

      • owa_util.http_header_close( )プロシージャをコールしてHTTPヘッダーをクローズします。

      • owa_util.get_cgi_envプロシージャをコールし、リクエスト・メソッドの値がHEADでない場合、wpg_docload.download_fileプロシージャを使用して、イメージ・データを含むBLOBのLOBロケータを含むlocalBlobの値を渡して、データベースからイメージをダウンロードします。

    6. ORDImageのisLocal( )メソッドでfalseが戻された場合、ORDImageのgetSourceType( )メソッドをコールして、値がFILEであるかどうかを判断します。値がFILEである場合、イメージ・データはローカル・ファイル・システム上に外部ファイルとして格納されています。次に、イメージ・データを含むBFILEのLOBロケータを取得します。

      • 変数localBfileにORDImageのgetBfile( )メソッドを割り当て、イメージ・データを含むBFILEのLOBロケータを取得します。

      • ORDImageのgetMimeType( )メソッドをコールして、イメージのMIMEタイプを判断し、このタイプをowa_util.mime_headerプロシージャに渡してHTTPヘッダーをオープンしたままにします。

      • ORDImageのgetUpdateTime( )メソッドをコールして、イメージの最終変更時刻を取得し、その時刻をordplsgwyutil.set_last_modifiedプロシージャに渡します。

      • owa_util.http_header_close( )プロシージャをコールしてHTTPヘッダーをクローズします。

      • owa_util.get_cgi_envプロシージャをコールし、リクエスト・メソッドの値がHEADでない場合、wpg_docload.download_fileプロシージャを使用して、イメージ・データを含むBFILEのLOBロケータを含むlocalBfileの値を渡して、ファイルからイメージをダウンロードします。

    7. ORDImageのisLocal( )メソッドでfalseが戻された場合、ORDImageのgetSourceType( )メソッドをコールして、値がHTTPであるかどうかを判断します。値がHTTPである場合、イメージ・データはHTTP URLで示される場所に格納されています。この場合、owa_util.redirect_urlプロシージャを使用して、ORDSourceが提供したURLにクライアントをリダイレクトします。

    8. ORDImageのisLocal( )メソッドでfalseが戻された場合、ORDImageのgetSourceType( )メソッドをコールして、値がFILEまたはHTTPであるかどうかを判断します。値がどちらでもない場合、イメージは、Oracle Multimediaで認識またはサポートされないアプリケーション固有のデータ・ソース・タイプとして格納されています。

関連項目:

セキュア・パスワードの作成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください

4.4 Oracle Multimedia Code Wizardの既知の制限事項

Code Wizardでは、Oracle Multimediaの機能がサポートされますが、既知の制限事項がいくつかあります。

Oracle Multimedia Code Wizardでは、次の制限事項が報告されています。

  • 複合主キーを含む表はサポートされません。

    複合主キーを含む表を使用するには、アップロード・プロシージャまたはダウンロード・プロシージャを作成し、生成されたソースを、すべての主キー列をサポートするように編集します。たとえば、メディアの取得プロシージャの場合、パラメータを追加して、そのパラメータをSELECT文のwhere句に指定する必要があります。

  • 埋込みOracle Multimediaオブジェクト型を含むユーザー定義のオブジェクト型は、Oracle Multimedia Code Wizardでは認識されません。