Oracle9i Application Server PL/SQLゲートウェイの使用, リリース

全文

(1)

Oracle9i Application Server

PL/SQLゲートウェイの使用

リリース 1.0.2.2

2001年10月 部品番号: J04224-01

(2)

Oracle9i Application Server PL/SQLゲートウェイの使用, リリース 1.0.2.2 部品番号: J04224-01

原本名:Oracle9i Application Server Using the PL/SQL Gateway, Release 1 (v1.0.2.2) 原本部品番号:A90099-01

原本著者:Cheryl Smith

原本協力者:Ron Decker, Pushkar Kapasi, Sanjay Khanna, Eric Lee, Kannan Muthukkaruppan Copyright © 1996, 2001, Oracle Corporation. All rights reserved.

Printed in Japan.

制限付権利の説明

プログラム(ソフトウェアおよびドキュメントを含む)の使用、複製または開示は、オラクル社との契 約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権に関する法律に より保護されています。

当プログラムのリバース・エンジニアリング等は禁止されております。

このドキュメントの情報は、予告なしに変更されることがあります。オラクル社は本ドキュメントの無 謬性を保証しません。

* オラクル社とは、Oracle Corporation(米国オラクル)または日本オラクル株式会社(日本オラクル)

を指します。

危険な用途への使用について

オラクル社製品は、原子力、航空産業、大量輸送、医療あるいはその他の危険が伴うアプリケーション を用途として開発されておりません。オラクル社製品を上述のようなアプリケーションに使用すること についての安全確保は、顧客各位の責任と費用により行ってください。万一かかる用途での使用により クレームや損害が発生いたしましても、日本オラクル株式会社と開発元であるOracle Corporation(米 国オラクル)およびその関連会社は一切責任を負いかねます。当プログラムを米国国防総省の米国政府 機関に提供する際には、『Restricted Rights』と共に提供してください。この場合次のNoticeが適用され ます。

Restricted Rights Notice

Programs delivered subject to the DOD FAR Supplement are "commercial computer software" and use, duplication, and disclosure of the Programs, including documentation, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement. Otherwise, Programs delivered subject to the Federal Acquisition Regulations are "restricted computer software" and use, duplication, and disclosure of the Programs shall be subject to the restrictions in FAR 52.227-19, Commercial Computer Software - Restricted Rights (June, 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.

このドキュメントに記載されているその他の会社名および製品名は、あくまでその製品および会社を識 別する目的にのみ使用されており、それぞれの所有者の商標または登録商標です。

(3)

目次 目次 目次 目次

はじめに はじめに はじめに

はじめに

... v Oracle9i Application Serverリリース1.0.2.2の新機能 ... vi マニュアルの表記規則 ... vi

1 PL/SQL ゲートウェイの概要 ゲートウェイの概要 ゲートウェイの概要 ゲートウェイの概要

クライアント・リクエストの処理 クライアント・リクエストの処理クライアント・リクエストの処理

クライアント・リクエストの処理 ... 1-1 PL/SQLゲートウェイの設定ゲートウェイの設定ゲートウェイの設定ゲートウェイの設定 ... 1-3 ステートレス(パッケージをリセット) ... 1-3 ステートレス(パッケージを保持) ... 1-4 ステートフル ... 1-4 Database Access Descriptor ... 1-4 PL/SQLゲートウェイの実行ゲートウェイの実行ゲートウェイの実行ゲートウェイの実行 ... 1-4 POST方式、GET方式およびHEAD方式 ... 1-6 トランザクション・モード

トランザクション・モードトランザクション・モード

トランザクション・モード ... 1-7 パラメータの受渡し

パラメータの受渡しパラメータの受渡し

パラメータの受渡し ... 1-7 名前によるパラメータの受渡し(パラメータのオーバーロード) ... 1-7 オーバーロードおよびPL/SQL配列 ... 1-8 柔軟なパラメータの受渡し ... 1-9 2パラメータ・インタフェース ... 1-9 4パラメータ・インタフェース ... 1-10 大きなパラメータの受渡し ... 1-11 ファイルのアップロードおよびダウンロード

ファイルのアップロードおよびダウンロードファイルのアップロードおよびダウンロード

ファイルのアップロードおよびダウンロード ... 1-11 ドキュメント表の定義 ... 1-11 CONTENT列のセマンティック ... 1-12 CONTENT_TYPE列のセマンティック ... 1-12

(4)

LAST_UPDATED列のセマンティック ... 1-12 DAD_CHARSET列のセマンティック ... 1-13 以前のスタイルのドキュメント表の定義 ... 1-13 関連パラメータ ... 1-13 document_path (ドキュメント・アクセス・パス) ... 1-14 document_proc(ドキュメント・アクセス・プロシージャ) ... 1-14 upload_as_long_raw ... 1-14 ファイルのアップロード ... 1-15 ドキュメントのパーツのアップロード ... 1-17 アップロード・ファイルの属性(MIMEタイプ)の指定 ... 1-17 複数のファイルのアップロード ... 1-17 ファイルのダウンロード ... 1-18 BLOBの直接ダウンロード ... 1-19 パスのエイリアシング(直接アクセス

パスのエイリアシング(直接アクセスパスのエイリアシング(直接アクセス

パスのエイリアシング(直接アクセスURL)))) ... 1-20 Common Gateway Interface((((CGI)環境変数)環境変数)環境変数)環境変数 ... 1-21 CGI環境変数の追加およびオーバーライド ... 1-22 NLS_LANG ... 1-22 REQUEST_CHARSET CGI環境変数 ... 1-23 REQUEST_IANA_CHARSET CGI環境変数 ... 1-23

2 PL/SQL ゲートウェイの使用によるアプリケーションのセキュリティ保護 ゲートウェイの使用によるアプリケーションのセキュリティ保護 ゲートウェイの使用によるアプリケーションのセキュリティ保護 ゲートウェイの使用によるアプリケーションのセキュリティ保護

ユーザーの認証 ユーザーの認証ユーザーの認証

ユーザーの認証 ... 2-1 Basic(データベース制御による認証) ... 2-2 認証解除 ... 2-2 Global OWA、Custom OWAおよびPer Package(カスタム認証) ... 2-2 CGIのREMOTE_USER環境変数 ... 2-4 PUBLICが付与されたが付与されたが付与されたが付与されたPL/SQLプロシージャの保護プロシージャの保護プロシージャの保護プロシージャの保護 ... 2-4 管理ページの保護

管理ページの保護管理ページの保護

管理ページの保護 ... 2-5 基本(Basic)認証による管理ページの保護 ... 2-6 Oracle Portal(シングル・サインオン)による管理ページの保護 ... 2-8

3 キャッシング キャッシング キャッシング キャッシング

PL/SQLゲートウェイのキャッシュゲートウェイのキャッシュゲートウェイのキャッシュゲートウェイのキャッシュ ... 3-2 妥当性チェック方式

妥当性チェック方式妥当性チェック方式

妥当性チェック方式 ... 3-2 Last-Modified ... 3-2 Entity Tag方式 ... 3-3

(5)

PL/SQLゲートウェイでの妥当性チェック方式の使用 ... 3-3 妥当性チェック方式を使用した2番目のリクエスト ... 3-5 期限方式の使用

期限方式の使用期限方式の使用

期限方式の使用 ... 3-7 期限方式を使用した2番目のリクエスト ... 3-9 システム・レベルとユーザー・レベルのキャッシュ

システム・レベルとユーザー・レベルのキャッシュシステム・レベルとユーザー・レベルのキャッシュ

システム・レベルとユーザー・レベルのキャッシュ ... 3-11 PL/SQL Web Toolkitファンクション(owa_cacheパッケージ) ... 3-12

4 PL/SQL ゲートウェイの設定 ゲートウェイの設定 ゲートウェイの設定 ゲートウェイの設定

「「

Gateway Configuration Menu」へのアクセス」へのアクセス」へのアクセス」へのアクセス ... 4-1 Oracle Portalからの「Gateway Configuration Menu」へのアクセス ... 4-1 グローバル設定へのアクセス

グローバル設定へのアクセスグローバル設定へのアクセス

グローバル設定へのアクセス ... 4-2 設定ファイルを使用してアクセス可能なグローバル設定 ... 4-2

「「「

Database Access Descriptor Settings」へのアクセス」へのアクセス」へのアクセス」へのアクセス ... 4-4 設定ファイルを使用してアクセス可能なDAD設定 ... 4-8 キャッシュの設定へのアクセス

キャッシュの設定へのアクセスキャッシュの設定へのアクセス

キャッシュの設定へのアクセス ... 4-11 PL/SQLキャッシュ ... 4-12 セッションCookieキャッシュ(Oracle Portalのみ) ... 4-13

5 PL/SQL ゲートウェイのインストール ゲートウェイのインストール ゲートウェイのインストール ゲートウェイのインストール

システム要件 システム要件システム要件

システム要件 ... 5-1 インストールの前に

インストールの前にインストールの前に

インストールの前に ... 5-2 インストール

インストールインストール

インストール ... 5-2 必須パッケージのインストール

必須パッケージのインストール必須パッケージのインストール

必須パッケージのインストール ... 5-2 Oracle9i Application ServerまたはWebDB Listenerからのアップグレード ... 5-3 OASからOracle9i Application Serverへのアップグレード ... 5-3 Oracle HTTP Server Listenerの設定の設定の設定の設定 ... 5-5 apachectlファイル ... 5-5 httpd.confファイル ... 5-6 plsql.confファイル ... 5-6 wdbsvr.appファイル ... 5-7 Oracle HTTP Serverのパフォーマンス・チューニング ... 5-7 mod_expires ... 5-7 KeepAliveディレクティブ ... 5-8 Oracle HTTP Serverによるエラー・ページのカスタマイズ ... 5-8 PL/SQLゲートウェイの設定ページへのアクセスゲートウェイの設定ページへのアクセスゲートウェイの設定ページへのアクセスゲートウェイの設定ページへのアクセス ... 5-9

(6)

plsql.conf設定ファイル ... 5-10 Oracle HTTP Server Listenerの起動と停止の起動と停止の起動と停止の起動と停止 ... 5-11 UNIX ... 5-11 Windows NT ... 5-11

6 PL/SQL ゲートウェイ・チュートリアル ゲートウェイ・チュートリアル ゲートウェイ・チュートリアル ゲートウェイ・チュートリアル

ストアド・プロシージャの作成およびデータベースへのロード ストアド・プロシージャの作成およびデータベースへのロードストアド・プロシージャの作成およびデータベースへのロード

ストアド・プロシージャの作成およびデータベースへのロード ... 6-1 アプリケーションを実行する

アプリケーションを実行するアプリケーションを実行する

アプリケーションを実行するHTMLページの作成ページの作成ページの作成ページの作成 ... 6-4

A パフォーマンス・チューニング パフォーマンス・チューニング パフォーマンス・チューニング パフォーマンス・チューニング

B トラブルシューティング トラブルシューティング トラブルシューティング トラブルシューティング

OASとの互換性との互換性との互換性との互換性 ... B-1 URLに/plsを含めないmod_plsqlの使用 ... B-1 柔軟なパラメータの受渡しおよび感嘆符の使用 ... B-2 ロギングロギングロギング

ロギング ... B-3 各

各各

mod_plsqlリクエストごとのデータベース・プロセスの制御リクエストごとのデータベース・プロセスの制御リクエストごとのデータベース・プロセスの制御リクエストごとのデータベース・プロセスの制御 ... B-3 mod_plsqlの接続プールの接続プールの接続プールの接続プール ... B-5 mod_plsqlリクエスト用のApacheリスナーのインストール ... B-6 デバッグデバッグデバッグ

デバッグ ... B-7 エラー・コード503(Service Temporary Unavailable) ... B-7 Netscape 6で記号が正しく表示されないで記号が正しく表示されないで記号が正しく表示されないで記号が正しく表示されない ... B-8 オーバーヘッドの問題

オーバーヘッドの問題オーバーヘッドの問題

オーバーヘッドの問題 ... B-8 定義オーバーヘッド ... B-8 定義オーバーヘッドの回避 ... B-9 柔軟なパラメータの受渡し(4パラメータ)によるオーバーヘッド ... B-10 柔軟なパラメータの受渡しによるオーバーヘッドの回避 ... B-10 PL/SQLををををWebDBとともに実行するための設定とともに実行するための設定とともに実行するための設定とともに実行するための設定 ... B-10

索引 索引 索引

索引

(7)

はじめに はじめに はじめに はじめに

このマニュアルでは、PL/SQL Gateway for Oracle9i Application Server 1.0.2.2のインストー ル、設定およびメンテナンスの方法について説明します。

第1章 - PL/SQLゲートウェイとその機能の概要を説明します。

第2章 - アプリケーションのセキュリティを保護する方法について説明します。

第3章 - PL/SQLゲートウェイにおける様々なキャッシュの方法について説明します。

第4章 - PL/SQLゲートウェイのグローバルな設定と、各Database Access Descriptorおよ

びキャッシュの個別設定について説明します。

第5章 - PL/SQLゲートウェイのインストール方法について説明します。

第6章 - データベースの表の内容をHTMLページとして表示する簡単なアプリケーションの 作成および実行方法について、ステップごとに説明します。

付録A - PL/SQLゲートウェイのパフォーマンス・チューニングの方法について説明しま す。

付録B - 一般的な問題とその解決方法について説明します。

(8)

Oracle9i Application Server リリース リリース リリース リリース 1.0.2.2 の新機能 の新機能 の新機能 の新機能

次に、mod_plsqlバージョン1.0.2.2の新機能を示します。

マニュアルの表記規則 マニュアルの表記規則 マニュアルの表記規則 マニュアルの表記規則

次に、このマニュアルで使用される表記規則を示します。

表 表表

0-1 新機能新機能新機能新機能 新機能 新機能新機能

新機能 参照先参照先参照先参照先

HTTP HEADリクエスト 1-6ページの「POST方式、GET方式および

HEAD方式」

新しいステートレス(パッケージの状態を保

持)モードでの実行 1-4ページの「ステートレス(パッケージを保 持)」

DADレベルのNLS_LANG、NLS_

TERRITORYおよびCHARSET

4-8ページの「設定ファイルを使用してアクセ ス可能なDAD設定」

Host:Port:SID形式の接続文字列 4-4ページの「「Database Access Descriptor Settings」へのアクセス」

Apacheエラー・ログへの重大な警告やエラー

の記録、 ApacheのErrorDocumentディレク ティブのサポート

4-8ページの「設定ファイルを使用してアクセ ス可能なDAD設定」およびB-3ページの「ロ ギング」

OWAパッケージのドキュメント 『Oracle9i Application Server PL/SQL Web Toolkitリファレンス』

表記規則表記規則表記規則

表記規則 意味意味意味意味 .

. .

例の中で使用されている縦方向の省略記号は、例に直接関係のない部分 が省略されていることを示します。

. . . 構文またはコマンド中の横方向の省略記号は、その構文またはコマンド

中で例に直接関係のない部分が省略されていることを示します。

太字のテキスト 太字のテキスト太字のテキスト

太字のテキスト 太字は、テキスト内で定義されている用語を示します。

< > 山カッコ内には、ユーザー定義の名前が含まれます。

[ ] 大カッコ内には、1つ以上のオプション句が含まれます。そのうちの 1つを選択するか、または何も選択する必要はありません。

(9)

1

PL/SQL ゲートウェイの概要 ゲートウェイの概要 ゲートウェイの概要 ゲートウェイの概要

Oracle9i Application Serverは、Webアプリケーションの運用のためのオラクル社の中間層

製品群を1つのソリューションに統合します。PL/SQLゲートウェイは、Web上での

PL/SQLベースのアプリケーションの構築をサポートします。PL/SQLストアド・プロシー

ジャにより、データベースからデータを取得し、Webブラウザで表示するデータおよびコー ドを含んだHTTPレスポンスを生成することが可能です。また、PL/SQLゲートウェイは、

Oracle Portalなど、他のOracle製品もサポートしています。

クライアント・リクエストの処理 クライアント・リクエストの処理 クライアント・リクエストの処理 クライアント・リクエストの処理

PL/SQLゲートウェイには、2つのバージョンがあります。 1つは、mod_plsqlを使用する

バージョンです。mod_plsqlは、データベースとの通信に使用するApacheのプラグインで

す。 mod_plsqlにより、ブラウザ・リクエストはデータベースに格納されたプロシージャ・

コールにSQL*Net接続経由でマッピングされます。これは、通常、/pls仮想パスで指定され

ます。

もう1つは、mod_oseを使用するバージョンです。 mod_oseには、組込みのPL/SQLゲー

トウェイが付属しています。

次に、サーバーがクライアントからのリクエストを受信した場合の実行ステップの概要を示 します。

(10)

クライアント・リクエストの処理

1. Oracle HTTP Serverは、クライアント・ブラウザからPL/SQL Server Pagesのリクエス

トを受信します。

2. Oracle HTTP Serverは、リクエストをPL/SQLゲートウェイにルーティングします。

3. リクエストは、PL/SQLゲートウェイによってOracle8iデータベースに転送されます。

PL/SQLゲートウェイは、DADに格納されている設定情報を使用してデータベースに

接続します。

4. PL/SQLゲートウェイは、コール・パラメータを準備して、アプリケーション内の

PL/SQLプロシージャを実行します。詳細は、4-1ページの「PL/SQLゲートウェイの設

定」を参照してください。

5. PL/SQLプロシージャにより、データベース内のデータおよびPL/SQL Web Toolkitを

使用して、HTMLページが生成されます。

6. レスポンスがPL/SQLゲートウェイに返されます。

(11)

PL/SQLゲートウェイの設定

7. Oracle HTTP Serverは、クライアント・ブラウザにレスポンスを送信します。

PL/SQLゲートウェイが実行するプロシージャにより、HTTPレスポンスをクライアントに

返します。この作業を簡単にするために、PL/SQLゲートウェイにはPL/SQL Web Toolkit が付属しています。PL/SQL Web Toolkitは、ストアド・プロシージャ内でリクエスト情報 の取得、HTMLタグの作成およびクライアントへのヘッダー情報の返信などに使用可能な パッケージのセットです(owaパッケージとも呼ばれます)。すべてのユーザーがアクセス できるように、このツールキットは共通スキーマにインストールします。

PL/SQL ゲートウェイの設定 ゲートウェイの設定 ゲートウェイの設定 ゲートウェイの設定

mod_plsqlまたはmod_oseのいずれを使用するかにより、該当するモード(ステートフル

またはステートレス)が決まります。

ステートレス(パッケージをリセット)

ステートレス(パッケージをリセット) ステートレス(パッケージをリセット)

ステートレス(パッケージをリセット)

このモードでは、mod_plsqlは、各リクエストの後にdbms_session.reset_packageをコール して、すべてのOWAパッケージおよびアプリケーション固有の変数とカーソルを消去しま す。さらに、リクエストの処理中にエラーが発生しなかった場合、暗黙的にコミットされま す。

PL/SQLアプリケーションでリクエスト完了後のクリーン・アップを行う必要はありませ

ん。各リクエストごとに、mod_plsqlが用意したクリーンなセッションが使用されます。こ のモードは、Oracle Portal 3.0で使用されます。

表 表表

1-1 ステートフル・モードおよびステートレス・モードステートフル・モードおよびステートレス・モードステートフル・モードおよびステートレス・モードステートフル・モードおよびステートレス・モード

mod_plsql mod_ose

ステートレス

(パッケージをリセット - Oracle Portalで使用)

リクエスト後、暗黙的にコミット

すべての変数およびカーソルを消去

ステートフル 注意注意注意

注意: mod_oseではステートレス・モードが使

用可能ですが、パフォーマンスが低下します。

暗黙的にコミットしない

OWAパッケージを消去(アプリケーション 固有のものを除く)

ステートレス

(パッケージを保持 - アプリケーション)

リクエスト後、暗黙的にコミット

OWAパッケージを消去(アプリケーション 固有のものを除く)

(12)

Database Access Descriptor

ステートレス(パッケージを保持)

ステートレス(パッケージを保持) ステートレス(パッケージを保持)

ステートレス(パッケージを保持)

このモードでは、mod_plsqlは、各リクエストの後にhtp.initをコールしてすべてのOWA パッケージを消去しますが、アプリケーション固有の変数とカーソルは消去しません。さら に、リクエストの処理中にエラーが発生しなかった場合、暗黙的にコミットされます。

PL/SQLアプリケーションでリクエスト完了時のセッションのクリーン・アップを行う必要

がありますが、コード内でコミットの発行を行う必要はありません。

ステートフル ステートフル ステートフル ステートフル

このモードでは、mod_oseは、各リクエストの後にhtp.initをコールしてすべてのOWA パッケージを消去しますが、アプリケーション固有の変数とカーソルは消去しません。ただ し、リクエスト完了時に暗黙的なコミットは行われません。

PL/SQLアプリケーションで、リクエスト完了時にセッションのクリーン・アップを行う必

要があります。また、コード内でコミットの発行を行う必要があります。このモードでは、

開始時にセッションがクリーンになっていることを想定していません。前回のセッションの 終了時の状態で次のセッションが開始されます。

このモードは、mod_ose付属の組込みPL/SQLゲートウェイで使用されています。HTTP リクエストごとに新規のデータベース・セッションを作成および破棄する必要がないため、

mod_oseを使用する場合にはステートフル・モードをお薦めします。詳細は、『Oracle8i

Oracle Servlet Engine ユーザーズ・ガイド』を参照してください。

Database Access Descriptor

PL/SQLゲートウェイの各リクエストは、Database Access Descriptor(DAD)に関連付け

られています。DADは、データベース・アクセスに使用される設定値のセットです。DAD により、次のような情報が指定されます。

データベース・エイリアス(Net8サービス名)。

データベースがリモートの場合、その接続文字列。

ドキュメントのアップロードおよびダウンロード用のプロシージャ。

また、DADにはユーザー名およびパスワード情報を指定できます。指定がない場合には、

URLの実行時にユーザー名とパスワードを入力するプロンプトが表示されます。詳細は、

2-1ページの「ユーザーの認証」を参照してください。

PL/SQL ゲートウェイの実行 ゲートウェイの実行 ゲートウェイの実行 ゲートウェイの実行

PL/SQLゲートウェイをWebブラウザで実行するには、次の形式でURLを入力します。

protocol://hostname[:port]/prefix/DAD/[[!][schema.][package.]proc_name[?query_

string]]

(13)

PL/SQLゲートウェイの実行

表 表表

1-2 PL/SQLゲートウェイのパラメータの実行ゲートウェイのパラメータの実行ゲートウェイのパラメータの実行ゲートウェイのパラメータの実行 パラメータ

パラメータパラメータ

パラメータ 説明説明説明説明

protocol httpまたはhttpsのいずれか。SSLの場合は、httpsを使

用します。

hostname Webサーバーが稼動しているマシン。

port

(オプション)

アプリケーション・サーバーがリスニングしているポート。指 定しない場合、ポート80が使用されます。

prefix PL/SQLリクエストを処理するためにWebサーバーで設定し

た仮想パス。このパラメータのデフォルトの設定はplsです。

たとえば、Webサーバーでplsを接頭辞に設定して、先頭に plsが付いたリクエストをすべてPL/SQLゲートウェイに ルーティングすることが可能です。

DAD このURLに使用するDADエントリ。

!記号

(オプション)

柔軟なパラメータの受渡しスキームの使用を指定。詳細は、

1-9ページの「柔軟なパラメータの受渡し」を参照してくださ い。

schema

(オプション)

データベース・スキーマ名。指定しない場合、

package.proc_nameの名前解決は、URLリクエストが処理 されたデータベース・ユーザーに基づいて行われます。

package

(オプション) PL/SQLストアド・プロシージャを含んだパッケージ。指定し ない場合、プロシージャはスタンドアロンになります。

proc_name 実行するPL/SQLストアド・プロシージャ。ファンクション

ではなく、プロシージャを指定する必要があります。 IN引数 のみ使用可能です。

?query_string

(オプション)

ストアド・プロシージャのパラメータ。この文字列は、GET 方式の書式に従います。たとえば、次のようになります。

複数のパラメータは&文字で区切ります。渡される値内 の空白文字は+文字に置き換えます。

HTMLフォームを使用して文字列を生成する場合(文字 列を自分で生成するのではなく)、書式化は自動的に行わ れます。

HTTPリクエストでHTTPのPOST方式を使用してデータ

をPL/SQLゲートウェイに送信する場合もあります。詳細

は、1-6ページの「POST方式、GET方式およびHEAD 方式」を参照してください。

(14)

PL/SQLゲートウェイの実行

例 例例

1: Webサーバーにplsが接頭辞として設定されており、ブラウザが次のURLを送信し

たとします。

http://www.acme.com:9000/pls/mydad/mypackage.myproc

この場合、www.acme.comで稼動し、ポート9000でリスニングしているWebサーバーが リクエストを処理します。Webサーバーは、リクエストを受信すると、そのリクエストを

PL/SQLゲートウェイに渡します。これは、WebサーバーがPL/SQLゲートウェイを実行

するよう設定されていることをpls接頭辞が示しているためです。次に、PL/SQLゲート ウェイは、mydadに関連付けられているDADを使用して、mypackageに格納されている myprocプロシージャを実行します。

例 例例

2: DAD、スキーマまたはストアド・プロシージャ名を含めずにURLを指定します。

http://www.acme.com:9000/pls/mydad

この場合、mydadというDADのデフォルトのホーム・ページ(PL/SQLゲートウェイの設 定ページで指定されている)が表示されます。

例 例例

3: DADのデフォルトのホーム・ページを起動するURLを指定します。

http://www.acme.com:9000/pls

パラメータの受渡しは名前で行われるため、通常、URLまたはHTTPヘッダー内での

PL/SQLパラメータの指定順序を考慮する必要はありません。ただし、この規則にはいくつ

か例外があります。詳細は、1-7ページの「パラメータの受渡し」を参照してください。

POST 方式、 方式、 方式、 方式、 GET 方式および 方式および 方式および 方式および HEAD 方式 方式 方式 方式

HTTPプロトコルのPOST方式、GET方式およびHEAD方式により、パラメータ・データ をアプリケーションに渡す方法(通常は名前と値のペア形式)がブラウザに対して指示され ます。パラメータ・データは、HTMLフォームによって生成されます。

PL/SQLゲートウェイ・アプリケーションでは、いずれの方式も使用できます。各方式の安

全性は、使用する転送プロトコル(httpまたはhttps)によって決定されます。

POST方式を使用する場合、パラメータはリクエストのBODYで渡されます。一般的に、

大量のパラメータ・データをサーバーに渡す場合は、POST方式を使用します。

GET方式を使用する場合、パラメータは問合せ文字列を使用して渡されます。この方式 には、使用するオペレーティング・システムにより、名前と値のペアの値の長さが環境 変数の値の最大長を超えることができないという制限があります。さらに、オペレー ティング・システムにより、定義可能な環境変数の数も制限されます。

HEAD方式は、GET方式と同様の機能を持っています。 HEAD方式では、HTTPステー タス・ラインおよびHTTPヘッダーが返される点のみ異なります。ブラウザにコンテン ツ・データは返されません。ツールのモニター時に、リクエストが正しく処理されたか どうかのみを知りたい場合に使用すると便利です。

(15)

パラメータの受渡し

トランザクション・モード トランザクション・モード トランザクション・モード トランザクション・モード

プロシージャを実行するためにURLリクエストを処理した後、エラーがある場合、PL/SQL ゲートウェイによりロールバックが実行されます。そうでない場合、ゲートウェイによりコ ミットが実行されます。このメカニズムでは、トランザクションが複数のHTTPリクエスト にまたがることはできません。このステートレス・モデルの場合、アプリケーションは、通

常HTTP Cookieまたはデータベース表を使用して状態を維持します。ステートフル・モード

とステートレス・モードの詳細は、1-3ページの「PL/SQLゲートウェイの設定」を参照し てください。

パラメータの受渡し パラメータの受渡し パラメータの受渡し パラメータの受渡し

PL/SQLゲートウェイは、次の処理をサポートしています。

名前によるパラメータの受渡し名前によるパラメータの受渡し名前によるパラメータの受渡し名前によるパラメータの受渡し

プロシージャまたはファンクションを起動するURL内の各パラメータは、一意の名前 により識別されます。パラメータのオーバーロードがサポートされています。詳細は、

1-7ページの「名前によるパラメータの受渡し(パラメータのオーバーロード)」を参照 してください。

柔軟なパラメータの受渡し柔軟なパラメータの受渡し柔軟なパラメータの受渡し柔軟なパラメータの受渡し

プロシージャの先頭に'!'記号が付加されます。詳細は、1-9ページの「柔軟なパラメー タの受渡し」を参照してください。

大きなパラメータ(最大大きなパラメータ(最大大きなパラメータ(最大大きなパラメータ(最大32KB)の受渡し)の受渡し)の受渡し)の受渡し

詳細は、1-11ページの「大きなパラメータの受渡し」を参照してください。

名前によるパラメータの受渡し(パラメータのオーバーロード)

名前によるパラメータの受渡し(パラメータのオーバーロード) 名前によるパラメータの受渡し(パラメータのオーバーロード)

名前によるパラメータの受渡し(パラメータのオーバーロード)

オーバーロードにより、名前が同じでパラメータの数、順序またはデータ型のファミリが異 なる複数のサブプログラム(プロシージャまたはファンクション)を使用できます。オー バーロードされたサブプログラムをコールすると、PL/SQLコンパイラは渡されたデータ型 に基づいて、どのサブプログラムをコールするかを決定します。

PL/SQLでは、ローカル・サブプログラムとパッケージ・サブプログラムをオーバーロード

できます。スタンドアロン・サブプログラムはオーバーロードできません。PL/SQLのオー バーロードの詳細は、Oracle Serverドキュメントの『Oracle8i PL/SQLユーザーズ・ガイド およびリファレンス』を参照してください。

パラメータ数が同じサブプログラムをオーバーロードする場合は、パラメータに違う名前を 付ける必要があります。HTMLデータはデータ型に関連付けられないため、PL/SQLゲート ウェイは、どのバージョンのサブプログラムをコールすればよいか判断できません。

(16)

パラメータの受渡し

たとえば、PL/SQLでは、2つの異なるプロシージャに同じパラメータ名を使用してプロ シージャを定義できますが、PL/SQLゲートウェイでこれを使用するとエラーが発生しま す。

-- legal PL/SQL, but not for the PL/SQL Gateway CREATE PACKAGE my_pkg AS

PROCEDURE my_proc (val IN VARCHAR2);

PROCEDURE my_proc (val IN NUMBER);

END my_pkg;

エラーを回避するには、パラメータに異なる名前をつけます。たとえば、次のようになりま す。

-- legal PL/SQL and also works for the PL/SQL Gateway CREATE PACKAGE my_pkg AS

PROCEDURE my_proc (valvc2 IN VARCHAR2);

PROCEDURE my_proc (valnum IN NUMBER);

END my_pkg;

最初のバージョンのプロシージャを実行するURLは次のようになります。

http://www.acme.com/pls/myDAD/my_pkg.my_proc?valvc2=input

2番目のバージョンのプロシージャを実行するURLは次のようになります。

http://www.acme.com/pls/myDAD/my_pkg.my_proc?valnum=34

オーバーロードおよび オーバーロードおよび オーバーロードおよび

オーバーロードおよび PL/SQL 配列 配列 配列 配列

パラメータ名が同じで、1つのプロシージャのデータ型がowa_util.ident_arr

(varchar2のテーブル)、もう1つのプロシージャのデータ型がスカラー型のオーバーロード

PL/SQLプロシージャがあるとします。このような場合でも、PL/SQLゲートウェイはこの

2つのプロシージャを区別できます。たとえば、次のプロシージャがあるとします。

CREATE PACKAGE my_pkg AS

PROCEDURE my_proc (val IN VARCHAR2); -- scalar data type

PROCEDURE my_proc (val IN owa_util.ident_arr); -- array data type END my_pkg;

これらのプロシージャには、それぞれvalという同じ名前のパラメータが1つあります。

PL/SQLゲートウェイがvalパラメータの値を1つだけ持つリクエストを受け取ると、スカ

ラー・データ型のプロシージャが実行されます。

例 例例

1: スカラー・バージョンのプロシージャを実行するには、次のURLを送信します。

http://www.acme.com/pls/myDAD/my_proc?val=john

valパラメータの値が複数存在するリクエストをPL/SQLゲートウェイが受け取ると、配列 データ型のプロシージャが実行されます。

(17)

パラメータの受渡し

例例例

2: 配列バージョンのプロシージャを実行するには、次のURLを送信します。

http://www.acme.com/pls/myDAD/my_proc?val=john&val=sally

確実に配列バージョンを実行できるようにする場合は、HTMLページで隠しフォーム・エレ メントを使用してダミーの値を送信します。このダミーの値は、プロシージャ内でチェック され、破棄されます。

柔軟なパラメータの受渡し 柔軟なパラメータの受渡し 柔軟なパラメータの受渡し 柔軟なパラメータの受渡し

PL/SQLゲートウェイでは、柔軟なパラメータの受渡しをサポートしており、ユーザーが任

意の数のエレメントを選択可能なHTMLフォームを使用することができます。URLベース のプロシージャ実行で柔軟なパラメータの受渡しを使用するには、URL内でプロシージャの 先頭に'!'記号を付加します。2つまたは4つのパラメータを使用可能です。PL/SQLゲート ウェイで使用する場合、2パラメータ・インタフェースの方がパフォーマンスが優れていま す。互換性維持のために4パラメータ・インタフェースもサポートされています。

2 パラメータ・インタフェース パラメータ・インタフェース パラメータ・インタフェース パラメータ・インタフェース

procedure [proc_name] is

name_array IN [array_type], value_array IN [array_type],

例 例例

: 次のURLを送信したとします。

http://www.acme.com/pls/myDAD/!scott.my_proc?x=john&y=10&z=doe 注意注意

注意注意: Oracle Application Serverとの下位互換性に関する疑問について

は、B-2ページの「柔軟なパラメータの受渡しおよび感嘆符の使用」を参 照してください。

表表表

1-3 2パラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータ パラメータ

パラメータパラメータ

パラメータ 説明説明説明説明 proc_name

(必須)

実行する PL/SQLプロシージャの名前。

name_array 送信された順序で示された、問合せ文字列から取り出される

名前(1から順番に索引付けされる)。

value_array 送信された順序で示された、問合せ文字列から取り出される

値(1から順番に索引付けされる)。

array_type

(必須)

送信された順序で示された、問合せ文字列から取り出される 値(1から順番に索引付けされる)。

(18)

パラメータの受渡し

感嘆符接頭辞(!)により、柔軟なパラメータの受渡しを使用するよう、PL/SQLゲート ウェイに指示します。これにより、プロシージャscott.myprocが実行され、次の2つの 引数が渡されます。

name_array ==> (‘x’, ‘y’, ‘z’)

values_array ==> (’john’, ’10’, ’doe’)

4 パラメータ・インタフェース パラメータ・インタフェース パラメータ・インタフェース パラメータ・インタフェース

互換性維持のために4パラメータ・インタフェースもサポートされています。 4パラメー タ・インタフェースを使用しているためにオーバーヘッドが発生する場合は、B-10ページの

「柔軟なパラメータの受渡し(4パラメータ)によるオーバーヘッド」を参照してください。

procedure [proc_name] is

(num_entires IN NUMBER, name_array IN [array_type], value_array IN [array_type], reserved in [array_type]);

例 例例

: query_string部分で名前 "x" が重複している次のURLを送信したとします。

http://www.acme.com/pls/myDAD/!scott.my_pkg.my_proc?x=a&y=b&x=c

感嘆符接頭辞(!)により、柔軟なパラメータの受渡しを使用するよう、PL/SQLゲート ウェイに指示します。これにより、プロシージャscott.my_pkg.myprocが実行され、次 の引数が渡されます。

num_entries ==> 3

name_array ==> (‘x’, ‘y’, ‘x’) 表表表

1-4 4パラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータ パラメータ

パラメータパラメータ

パラメータ 説明説明説明説明 proc_name

(必須)

実行する PL/SQLプロシージャの名前。

num_entries 問合せ文字列内のname_valueのペア数。

name_array 送信された順序で示された、問合せ文字列から取り出される

名前(1から順番に索引付けされる)。

value_array 送信された順序で示された、問合せ文字列から取り出される

値(1から順番に索引付けされる)。

reserved 使用されていません。今後の使用のために確保されています。

array_type

(必須) varchar2型のテーブルによる任意のPL/SQL索引(owa.vc_

arrなど)。

(19)

ファイルのアップロードおよびダウンロード

values_array ==> (‘a’, ‘b’, ‘c’) reserved ==> ()

大きなパラメータの受渡し 大きなパラメータの受渡し 大きなパラメータの受渡し 大きなパラメータの受渡し

スカラー引数として渡される値と、varchar2引数のテーブルによる索引のエレメントとして 渡される値に使用できるサイズは、最大32KBです。

たとえば、柔軟なパラメータの受渡し(1-9ページの「柔軟なパラメータの受渡し」を参照)

を使用する場合、URLのquery_string部分の名前または値は、それぞれ実行されるプロ シージャのname_arrayまたはvalue_array引数のエレメントとして渡されます。これ らの名前または値に使用できるサイズは、最大32KBです。

ファイルのアップロードおよびダウンロード ファイルのアップロードおよびダウンロード ファイルのアップロードおよびダウンロード ファイルのアップロードおよびダウンロード

PL/SQLゲートウェイでは、次のことが可能です。

キャラクタ・セットを変換せずに、ファイルをロー・バイト・ストリームとしてアップ ロードおよびダウンロードします。ファイルは、ドキュメント表にアップロードされま

す。PL/SQLアップロード・ハンドラ・ルーチンが表の適切な列を取得できるよう、主

キーが渡されます。

異なるアプリケーションのファイルを混同しないよう、アプリケーションごとに1つ以 上、アップロードされるファイル用の表を指定します。

問合せ文字列を使用しない形式のURL経由でこれらの表のファイルにアクセスできるようにします。

たとえば、次のようになります。

http://www.acme.com:9000/mysite/pls/docs/cs250/lecture1.htm

これは、URLの相互参照を含んだファイル・セットのアップロードをサポートするため に必要です。

1回のフォーム送信につき複数のファイルをアップロードします。

ドキュメント表のLONG RAWおよびBLOB型の列にファイルをアップロードします。

ドキュメント表の定義 ドキュメント表の定義 ドキュメント表の定義 ドキュメント表の定義

DADごとにドキュメント格納表を指定できます。ドキュメント格納表には、次の定義が必 要です。

CREATE TABLE [table_name] (

NAME VARCHAR2(256) UNIQUE NOT NULL, MIME_TYPE VARCHAR2(128),

DOC_SIZE NUMBER, DAD_CHARSET VARCHAR2(128), LAST_UPDATED DATE,

(20)

ファイルのアップロードおよびダウンロード

CONTENT_TYPE VARCHAR2(128),

[content_column_name] [content_column_type]

[ , [content_column_name] [content_column_type]]

);

table_nameは、ユーザーが選択できます。content_column_type型には、LONG RAWまたはBLOBのいずれかを使用します。

content_column_nameは、対応するcontent_column_typeによって異なります。

content_column_typeがLONG RAWの場合、content_column_nameは

CONTENTにする必要があります。

content_column_typeがBLOBの場合、content_column_nameはBLOB_

CONTENTにする必要があります。

次に、有効なドキュメント表の定義例を示します。

NAME VARCHAR(128) UNIQUE NOT NULL, MIME_TYPE VARCHAR(128),

DOC_SIZE NUMBER, DAD_CHARSET VARCHAR(128), LAST_UPDATED DATE,

CONTENT_TYPE VARCHAR(128), CONTENT LONG RAW, BLOB_CONTENT BLOB ;

CONTENT 列のセマンティック 列のセマンティック 列のセマンティック 列のセマンティック

表の内容は、CONTENT列に格納されます。ドキュメント表には、複数のCONTENT列を含め ることが可能です。ただし、ドキュメント表の各行について、CONTENT列は1つだけ使用 されます。その他のCONTENT列はNULLに設定されます。

CONTENT_TYPE 列のセマンティック 列のセマンティック 列のセマンティック 列のセマンティック

CONTENT_TYPE列は、ドキュメントが格納されているCONTENT列を追跡するために使用さ れます。ドキュメントがアップロードされると、PL/SQLゲートウェイにより、この列の値 が型名に設定されます。

たとえば、ドキュメントがBLOB_CONTENT列にアップロードされた場合、ドキュメントの CONTENT_TYPE列には文字列"BLOB"が設定されます。

LAST_UPDATED 列のセマンティック 列のセマンティック 列のセマンティック 列のセマンティック

LAST_UPDATED列には、ドキュメントの作成または最終更新日時が反映されます。ドキュメ ントがアップロードされると、PL/SQLゲートウェイにより、ドキュメントのLAST_

UPDATED列にデータベース・サーバーの時間が設定されます。

(21)

ファイルのアップロードおよびダウンロード

その後アプリケーションによりドキュメントの内容または属性が変更された場合、LAST_

UPDATEDの時間も更新する必要があります。

LAST_UPDATED列は、HTTPクライアント(ブラウザなど)がキャッシュに入っている バージョンのドキュメントを使用してもよいかどうかをPL/SQLゲートウェイがチェック し、その結果をHTTPクライアントに知らせるために使用されます。これにより、ネット ワーク・トラフィックが削減され、サーバーのパフォーマンスが改善されます。

DAD_CHARSET 列のセマンティック 列のセマンティック 列のセマンティック 列のセマンティック

DAD_CHARSET列は、ファイルのアップロード時のキャラクタ・セット設定を追跡します。

この列は、今後の使用のために確保されています。

以前のスタイルのドキュメント表の定義 以前のスタイルのドキュメント表の定義 以前のスタイルのドキュメント表の定義 以前のスタイルのドキュメント表の定義

WebDBリリース2.xの以前のリリースで使用されているドキュメント・モデルとの下位互

換性を維持するために、PL/SQLゲートウェイでは、次のようにCONTENT_TYPE、DAD_

CHARSETおよびLAST_UPDATED列が存在しない、以前のドキュメント格納表の定義もサ ポートしています。

/* older style document table definition (DEPRECATED) */

CREATE TABLE [table_name]

(

NAME VARCHAR2(128), MIME_TYPE VARCHAR2(128), DOC_SIZE NUMBER, CONTENT LONG RAW );

関連パラメータ 関連パラメータ 関連パラメータ 関連パラメータ

各DADについて、次の設定パラメータがファイルのアップロードまたはダウンロードに関 係します。

document_table (document_table_name)

document_tableパラメータは、このDADによってファイルがアップロードされたとき にドキュメントの格納に使用する表を指定します。

構文 構文構文 構文:

document_table = [document_table_name]

(22)

ファイルのアップロードおよびダウンロード

例 例例 例:

document_table = my_documents または

document_table = scott.my_document_table

document_path (ドキュメント・アクセス・パス) (ドキュメント・アクセス・パス) (ドキュメント・アクセス・パス) (ドキュメント・アクセス・パス)

document_pathパラメータは、ドキュメントにアクセスするためのパス・エレメントを指 定します。document_pathパラメータは、URL内で、DAD名の直後に付加されます。た とえば、ドキュメントのアクセス・パスがdocsの場合、URLは次のようになります。

http://neon/pls/myDAD/docs/myfile.htm

この場合、myDADはDAD名で、myfile.htmはファイル名です。

構文 構文構文 構文:

document_path = [document_access_path_name]

document_proc (ドキュメント・アクセス・プロシージャ) (ドキュメント・アクセス・プロシージャ) (ドキュメント・アクセス・プロシージャ) (ドキュメント・アクセス・プロシージャ)

document_procプロシージャは、アプリケーション指定のプロシージャです。これにはパ ラメータがなく、ドキュメント・アクセス・パスを持つURLリクエストを処理します。ド キュメント・アクセス・プロシージャは、ファイルをダウンロードするために、wpg_

docload.download_file(filename)をコールします。ファイル名は、URL指定に基づ いて取得します。たとえば、これをアプリケーションで使用して、ファイル・レベルのアク セス制御やバージョン管理をインプリメントすることが可能です。このようなアプリケー ションの例を、1-18ページの「ファイルのダウンロード」に示します。

構文 構文構文 構文:

document_proc = [document_access_procedure_name]

例 例例 例:

document_proc = my_access_procedure または

document_proc = scott.my_pkg.my_access_procedure

upload_as_long_raw

DADパラメータupload_as_long_rawは、ファイル拡張子に基づいてファイルのアップ ロードを設定します。DADパラメータupload_as_long_rawの値は、ファイル拡張子の カンマ(,)区切りのリストです。これらの拡張子を持つファイルは、PL/SQLゲートウェイ

(23)

ファイルのアップロードおよびダウンロード

により、ドキュメント表のlong_raw型のCONTENT列にアップロードされます。他の拡 張子を持つファイルは、BLOB_CONTENT列にアップロードされます。

ファイル拡張子には、テキスト定数(jpeg、gifなど)を使用できます。さらに、アスタリス ク(*)を特別なファイル拡張子として使用できます。これは、upload_as_long_raw設 定でリストされていない拡張子を持つすべてのファイルに一致します。

構文 構文構文 構文:

upload_as_long_raw = [file_extension][,[file_extension]]*

[file_extension]はファイル拡張子('.' 記号はあってもなくても結構で、たとえば、txt または.txtが使用可能です。)またはワイルド・カード文字 '*' です。

例 例例 例:

upload_as_long_raw = html, txt upload_as_long_raw = *

ファイルのアップロード ファイルのアップロード ファイルのアップロード ファイルのアップロード

クライアント・マシンからデータベースにファイルを送信する場合は、次に示す内容を含ん だHTMLページを作成します。

enctype属性にmultipart/form-dataが設定され、action属性にアクション・プロ

シージャと呼ばれるPL/SQLゲートウェイ・プロシージャ・コールが関連付けられてい るFORMタグ。

type属性とname属性にfileが設定されたINPUTエレメント。INPUT type="file"エ レメントを使用すると、ユーザーはファイル・システムのファイルを参照して、そこか らファイルを選択できます。

ユーザーが「送信」をクリックすると、次のイベントが発生します。

1. ブラウザは、ユーザーが指定したファイルとその他のフォーム・データをサーバーに アップロードします。

2. PL/SQLゲートウェイは、ファイルの内容をデータベースのドキュメント格納表内に格

納します。表の名前は、DADパラメータdocument_table設定から導出されます。

3. FORMのaction属性で指定したアクション・プロシージャが、ファイルのアップロード

を行わずにPL/SQLゲートウェイ・プロシージャを実行する場合と同じように実行され ます。

次の例に、アップロードするファイルをユーザーがファイル・システムから選択可能な HTMLフォームを示します。このフォームには、ユーザーがファイルに関する情報を入力で きるその他のフィールドも含まれています。

<html>

<head>

<title>test upload</title>

(24)

ファイルのアップロードおよびダウンロード

</head>

<body>

<FORM enctype="multipart/form-data"

action="pls/myDAD/write_info"

method="POST">

<p>Author’s Name:<INPUT type="text" name="who">

<p>Description:<INPUT type="text" name="description"><br>

<p>File to upload:<INPUT type="file" name="file"><br>

<p><INPUT type="submit">

</FORM>

</body>

</html>

ユーザーがフォームで「送信」をクリックすると、ブラウザにより、INPUT type="file"

エレメントにリストされたファイルがアップロードされます。

次に、write_infoプロシージャが実行されます。このプロシージャは、フォームのフィー ルドの情報をデータベース内の表に書き込み、ページをユーザーに返します。アクション・

プロシージャによりユーザーにレスポンスを返す必要はありませんが、送信が成功したか失 敗したかをユーザーに知らせるようにすることをお薦めします。

次に、サンプルのwrite_infoプロシージャを示します。

procedure write_info ( who in varchar2, description in varchar2, file in varchar2) as begin

insert into myTable values (who, description, file);

htp.htmlopen;

htp.headopen;

htp.title('File Uploaded');

htp.headclose;

htp.bodyopen;

htp.header(1, 'Upload Status');

htp.print('Uploaded ' || file || ' successfully');

htp.bodyclose;

htp.htmlclose;

end;

名前の競合の可能性を低減するために、ブラウザから取得したファイル名の先頭に、生成さ れたディレクトリ名が付加されます。フォームで指定されたアクション・プロシージャによ り、この名前が変更されます。このため、たとえば/private/minutes.txtがアップ ロードされた場合、ゲートウェイによって表に格納された名前は、

F9080/private/minutes.txtとなります。アプリケーションにより、コール先のストア ド・プロシージャ内でこの名前を変更できます。たとえば、アプリケーションにより、名前 をscott/minutes.txtに変更できます。

(25)

ファイルのアップロードおよびダウンロード

ドキュメントのパーツのアップロード ドキュメントのパーツのアップロード ドキュメントのパーツのアップロード ドキュメントのパーツのアップロード

HTMLファイルは、アップロードされた後、PL/SQLゲートウェイによって他のパーツ

(GIF、JPEGファイルなど)について解析されます。これらのパーツの詳細情報は、

documentparts表という別の表で管理されます。この表の名前は、ドキュメント表の名前に

基づいて決まります。次のシグネチャが必要です。

create table %YOUR_DOCTABLE_NAME%part (

DOCUMENT VARCHAR2(256), PART VARCHAR2(256), UPLOADED CHAR(1),

[add any more columns you want to add here]

constraint %YOUR_DOCTABLE_NAME%part_pk primary key( document, part ) )

pctfree 0

%YOUR_DOCTABLE_NAME%は、ご使用のドキュメント表の名前です(1-11ページの

「ドキュメント表の定義」を参照)。

この表にアクセスするために、適切な権限が付与されている必要があります。

grant select, insert, update on %YOUR_DOCTABLE_NAME%part to public

元のHTMLドキュメントをアップロードしたら、アップロードされていないパーツがない

か、documentparts表を確認してください。この情報を使用して、ユーザーに通知します。

ドキュメント表にパーツがアップロードされていない場合、ユーザーがHTMLファイルを ダウンロードしたときに正しく表示されません(イメージが表示されないなど)。

アップロード・ファイルの属性(

アップロード・ファイルの属性( アップロード・ファイルの属性(

アップロード・ファイルの属性(MIME タイプ)の指定 タイプ)の指定 タイプ)の指定 タイプ)の指定

ストアド・プロシージャでは、アップロード・ファイルの名前を変更する以外にも、ファイ ルに関するその他の属性を変更できます。たとえば、1-15ページの「ファイルのアップロー ド」に示した例のフォームでは、アップロードするドキュメントのMultipurpose Internet

Mail Extension(MIME)タイプをユーザーが入力するフィールドとして表示できます。

MIMEタイプは、write_infoのパラメータとして受信できます。その場合、ドキュメント 表には、ファイルのアップロード時にPL/SQLゲートウェイがmultipartフォームから解析 したデフォルトのMIMEタイプではなく、そのドキュメントのMIMEタイプが格納されま す。

複数のファイルのアップロード 複数のファイルのアップロード 複数のファイルのアップロード 複数のファイルのアップロード

1回の送信で複数のファイルを送信する場合、アップロード・フォームに複数の<INPUT type="file" name="file">エレメントが含まれている必要があります。複数のINPUT エレメントで、nameに同じ名前を定義する場合、アクション・プロシージャでパラメータ

名をowa.vc_arr型として宣言する必要があります。ファイルのINPUTエレメントに一意の

(26)

ファイルのアップロードおよびダウンロード

名前を定義することも可能で、その場合、アクション・プロシージャでそれぞれをvarchar2と して宣言する必要があります。たとえば、フォームに次のエレメントが含まれているとします。

<INPUT type="file" name="textfiles">

<INPUT type="file" name="textfiles">

<INPUT type="file" name="binaryfile">

この場合、アクション・プロシージャに次のパラメータを含める必要があります。

procedure handle_text_and_binary_files(textfiles IN owa.vc_arr, binaryfile IN varchar2).

ファイルのダウンロード ファイルのダウンロード ファイルのダウンロード ファイルのダウンロード

ファイルをデータベースに送信した後、それらのファイルのダウンロード、データベースか らの削除および属性の読込みと書込みが可能になります。

ファイルをダウンロードするには、ダウンロードを開始するために

wpg_docload.download_file (file_name)をコールする、パラメータを持たないス トアド・プロシージャを作成します。

ユーザーに表示されるHTMLページには、ドキュメント・アクセス・パスを含み、ダウン ロードするファイルを指定するURLへのリンクが示されます。

たとえば、DADのドキュメント・アクセス・パスにdocs、ドキュメント・アクセス・プロ シージャにwebview.process_downloadが指定されている場合、ユーザーが次のURL をクリックすると、webview.process_downloadプロシージャがコールされます。

http://www.acme:9000/pls/webview/docs/myfile.htm

次に、process_downloadのインプリメンテーションの例を示します。

procedure process_download is v_filename varchar2(255);

begin

-- getfilepath() uses the SCRIPT_NAME and PATH_INFO cgi -- environment variables to construct the full pathname of -- the file URL, and then returns the part of the pathname -- following '/docs/'

v_filename := getfilepath;

select name into v_filename from plsql_gateway_doc where UPPER(name) = UPPER(v_filename);

-- now we call docload.download_file to initiate -- the download.

wpg_docload.download_file(v_filename);

exception

when others then v_filename := null;

end process_download;

(27)

ファイルのアップロードおよびダウンロード

ゲートウェイで実行中のプロシージャからwpg_docload.download_file(filename) をコールすると、ファイルfilenameのダウンロードが開始されます。ただし、ファイルの ダウンロードが開始されると、プロシージャによって生成される他のHTML(HTPインタ フェースによって生成される)はブラウザに返されません。

PL/SQLゲートウェイは、ドキュメント表からファイル名を探します。ドキュメント表内に

は、NAME列がファイル名に一致する一意の行が存在する必要があります。PL/SQLゲー トウェイは、ドキュメント表のMIME_TYPE列の情報に基づき、HTTPレスポンス・ヘッ ダーを生成します。CONTENT_TYPE列の値により、ドキュメントの内容がどのCONTENT 列から取得されるかが決まります。ドキュメントの内容は、HTTPレスポンスの本体として 送信されます。

BLOB の直接ダウンロード の直接ダウンロード の直接ダウンロード の直接ダウンロード

Binary Large Object(BLOB)データ型として格納されるコンテンツもダウンロードできま

す。

1. wpg_docload.download_file(blob)をコールするストアド・プロシージャを作成 します。blobはデータ型BLOBです。 PL/SQLゲートウェイは、BLOBのコンテンツ に関する情報を保有していないため、情報を提供する必要があります。

2. Content-Typeおよびその他のヘッダーを設定します。

例 例例

: 次のプロシージャでは、引数の名前を使用して表からBLOBを選択し、BLOBの直 接ダウンロードを開始します。

procedure download_blob(varchar2 name) is myblob blob;

begin

a. name引数を使用して、mytableからBLOBを選択します。

select blob_data into myblob from mytable where blob_name = name;

b. コンテンツについて記述したヘッダーを設定します。

owa_util.mime_header('text/html', FALSE);

htp.p('Content-Length: ' || dbms_lob.get_length(myblob));

owa_util.http_header_close;

c. BLOBの直接ダウンロードを開始します。

wpg_docload.download_file(myblob);

end;

mytable表の構造は次のとおりです。

create table mytable

Updating...

関連した話題 :

Scan and read on 1LIB APP