Oracle9i Application Server
mod_plsql ユーザーズ・ガイド
リリース2(9.0.2)
2002年7月 部品番号: J05895-01
Oracle9i Application Server mod_plsql ユーザーズ・ガイド, リリース2(9.0.2)
部品番号: J05895-01
原本名:Oracle9i Application Server mod_plsql User's Guide, Release 2 (9.0.2) 原本部品番号:A90855-01
原本協力者:Ron Decker, Pushkar Kapasi, Sanjay Khanna, Eric Lee, Kannan Muthukkaruppan Copyright © 1996, 2002, 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.
このドキュメントに記載されているその他の会社名および製品名は、あくまでその製品および会社を識 別する目的にのみ使用されており、それぞれの所有者の商標または登録商標です。
i
目次 目次 目次 目次
はじめに はじめに はじめに
はじめに
... iii関連文書 ... iv
Oracleのサービスとサポート ... v
表記規則 ... vi
1 mod_plsql の使用 の使用 の使用 の使用
Oracleデータベース要件データベース要件データベース要件データベース要件 ... 1-2 インストールの前に
インストールの前にインストールの前に
インストールの前に ... 1-2 必須パッケージのインストール
必須パッケージのインストール必須パッケージのインストール
必須パッケージのインストール ... 1-3 Oracle9i Application ServerまたはWebDBリスナーからのアップグレード ... 1-4 mod_plsqlの設定ページへのアクセスの設定ページへのアクセスの設定ページへのアクセスの設定ページへのアクセス ... 1-5 OEMからDAD設定ページへのアクセス ... 1-5 PortalからDAD設定ページへのアクセス ... 1-6
2 mod_plsql の概要 の概要 の概要 の概要
クライアント・リクエストの処理 クライアント・リクエストの処理クライアント・リクエストの処理
クライアント・リクエストの処理 ... 2-2 データベース・アクセス記述子(
データベース・アクセス記述子(データベース・アクセス記述子(
データベース・アクセス記述子(Database Access Descriptor: DAD)))) ... 2-3 mod_plsqlの実行の実行の実行の実行 ... 2-4 POST方式、GET方式およびHEAD方式 ... 2-5 トランザクション・モード
トランザクション・モードトランザクション・モード
トランザクション・モード ... 2-6
パラメータの受渡し パラメータの受渡しパラメータの受渡し
パラメータの受渡し ... 2-6 名前によるパラメータの受渡し(パラメータのオーバーロード) ... 2-7 オーバーロードとPL/SQL配列 ... 2-8 柔軟なパラメータの受渡し ... 2-8 2パラメータ・インタフェース ... 2-8 4パラメータ・インタフェース ... 2-9 大きなパラメータの受渡し ... 2-10 ファイルのアップロードとダウンロード
ファイルのアップロードとダウンロードファイルのアップロードとダウンロード
ファイルのアップロードとダウンロード ... 2-11 ドキュメント表の定義 ... 2-11 CONTENT列の意味 ... 2-12 CONTENT_TYPE列の意味 ... 2-12 LAST_UPDATED列の意味 ... 2-12 DAD_CHARSET列の意味 ... 2-12 以前のスタイルのドキュメント表の定義 ... 2-13 ドキュメントのアップロード/ダウンロードのパラメータ ... 2-13 PlsqlDocumentTablename ... 2-13 PlsqlDocumentPath(ドキュメント・アクセス・パス) ... 2-13 PlsqlDocumentProcedure(ドキュメント・アクセス・プロシージャ) ... 2-14 PlsqlUploadAsLongRaw ... 2-14 ファイルのアップロード ... 2-15 アップロード・ファイルの属性(MIMEタイプ)の指定 ... 2-17 複数のファイルのアップロード ... 2-17 ファイルのダウンロード ... 2-18 BLOBのダイレクト・ダウンロード ... 2-19 パスのエイリアシング(ダイレクト・アクセス
パスのエイリアシング(ダイレクト・アクセスパスのエイリアシング(ダイレクト・アクセス
パスのエイリアシング(ダイレクト・アクセスURL)))) ... 2-20 Common Gateway Interface(((CGI)環境変数( )環境変数)環境変数)環境変数 ... 2-21 CGI環境変数の追加およびオーバーライド ... 2-22 PlsqlNLSLanguage ... 2-23 REQUEST_CHARSET CGI環境変数 ... 2-23 REQUEST_IANA_CHARSET CGI環境変数 ... 2-23 mod_plsqlでの制限事項での制限事項での制限事項での制限事項 ... 2-23
iii
はじめに はじめに はじめに はじめに
このマニュアルでは、Oracle9i Application Server リリース2(9.0.2)へのmod_plsqlのイ ンストール、設定およびメンテナンスの方法について説明します。次の章が含まれていま す。
第1章 - mod_plsqlの使用方法について説明します。
第2章 - mod_plsqlとその機能の概要を説明します。
関連文書 関連文書 関連文書 関連文書
詳細は、次のマニュアルを参照してください。
タイトルタイトルタイトル
タイトル 部品番号部品番号部品番号部品番号 内容内容内容内容
『Oracle9i Application Server Oracle HTTP Server管理ガイド』
J05894-01 Oracle HTTP Serverモジュールについ て。コマンドライン・ツールを使用し た管理と、手動による設定ファイル
(DADパラメータ、http.confなど)の 編集
『Oracle9i Application Server セキュリティ・ガイド』
J05891-01 mod_plsqlを使用した、データベー ス・アクセスの保護
『Oracle9i Application Server パフォーマンス・ガイド』
J05913-01 パフォーマンスとチューニングに関す
る資料およびキャッシング
『Oracle9i Application Server 管理者ガイド』
J05890-01 Oracle Enterprise Managerコンソール
(DAD設定)を使用したOracle9i Application Serverの管理
『Oracle9i Application Server R1.0.2.2.xからR9.0.2への移行 リリース2(9.0.2)』
J05911-01 変更されたパラメータ、およびDAD
への移行に使用するツール
『Oracle9i Application Server PL/SQL Web Toolkitリファレンス』
J05896-01 OWAパッケージに関する情報
プラットフォーム固有の Oracle9i Application Server インストレーション・ガイド
Oracle9i Application Serverのインス トール
『Oracle9i Application Server Oracle Application Serverからの 移行』
J05912-01 前のバージョンのOracle Application Serverからの移行
『Oracle9i Application Server概要』 J05889-01 Oracle9i Application Serverの概要
v
Oracle のサービスとサポート のサービスとサポート のサービスとサポート のサービスとサポート
Oracle製品およびグローバル・サービスに関する情報は、次のURLで入手できます。
■ http://www.oracle.co.jp
次の各項に、各サービスに接続するためのURLを記載します。
OTN-J ( ( ( ( Oracle Technology Network Japan ) ) ) )
OTN-J(Oracle Technology Network Japan)へは、次のURLで登録することができます。
http://otn.oracle.co.jp/membership/
OTN-Jでは、テクニカル・ペーパー、ディスカッション・フォーラム、コード・サンプル、
製品マニュアル、セルフサービス開発者のサポート、およびOracleの開発者用の主要製品 を提供しています。これによって、Oracleテクノロジに基づいたアプリケーションの開発お よび配布を促進できます。
オラクル社カスタマ・サポート・センター オラクル社カスタマ・サポート・センター オラクル社カスタマ・サポート・センター オラクル社カスタマ・サポート・センター
テクニカル・サポートへの連絡先のリストは、次のURLで入手できます。
http://www.oracle.co.jp/support/
問題点についての情報を事前に準備しておくためのテンプレートが用意されています。 CSI 番号(ある場合)または詳細な連絡先情報が必要です。また、プロジェクト固有の情報があ ればそれも含めてください。
製品およびドキュメント 製品およびドキュメント 製品およびドキュメント 製品およびドキュメント
製品のマニュアルは、次のURLにあります。
■ http://otn.oracle.co.jp/document/
研修およびトレーニング 研修およびトレーニング 研修およびトレーニング 研修およびトレーニング
研修に関する情報と各国のスケジュールは、次のURLで入手できます。
■ http://www.oracle.co.jp/education/
表記規則 表記規則 表記規則 表記規則
このマニュアルでは、次の表記規則を使用しています。
表記規則表記規則表記規則
表記規則 意味意味意味意味 .
. .
コード例の中にある垂直の省略記号は、コード例に直接関係のない情報 が省略されていることを示します。
. . . 構文またはコマンドの中にある水平の省略記号は、例に直接関係のない
構文またはコマンドの一部が省略されていることを示します。
太字太字太字
太字 本文の中にある太字は、本文中に定義されている用語を示します。
< > 山カッコで囲まれている項目は、ユーザーが指定する名前を示します。
[ ] 大カッコで囲まれている項目は、オプション句を示します。選択肢の中 から1つ選択するか、または何も入力しなくてもかまいません。
mod_plsqlの使用 1-1
1
mod_plsql の使用 の使用 の使用 の使用
Oracleデータベース要件
Oracle データベース要件 データベース要件 データベース要件 データベース要件
mod_plsqlを使用するOracleデータベースに推奨される最低条件を次に示します。
■ Oracle8i 以上
■ Oracle8i データベースでは、パス設定が正しいことを確認してください。
■ Solarisの場合は、データベースに次のパッチ・セットが必要です。
■ Oracle8iリリース8.1.6データベースの場合は、8.1.6.3以上
■ Oracle8iリリース8.1.7データベースの場合は、8.1.7.2以上
■ Windows NTの場合は、次のパッチ・セットが必要です。
■ Oracle8iリリース8.1.6データベースの場合は、8.1.6.3.1以上
■ Oracle8iリリース8.1.7データベースの場合は、8.1.7.1.1以上
インストールの前に インストールの前に インストールの前に インストールの前に
Oracle9i Application ServerのOracle Universal Installerを使用してmod_plsqlをインス トールする前に、次の前提条件を満たしている必要があります。
■ mod_plsqlで必要なPL/SQL Web ToolkitパッケージをロードするデータベースのSYS
ユーザー・パスワードが必要です。
■ mod_plsqlを接続するデータベースが稼動している必要があります。
■ Oracle Universal Installerを実行するマシンに十分なディスク領域が必要です。
■ Oracle Universal InstallerがoraInventoryデータを書き込むディレクトリの書込み許可
が必要です。
注意 注意注意
注意: Oracle 9.0.1.2クライアント・ライブラリが、mod_plsqlと同じ
Oracleホームにインストールされている必要があります。これらのライブ
ラリがインストールされていると、mod_plsqlをリモートのOracle8i 以上 のデータベースに対して実行することが可能です。
必須パッケージのインストール
mod_plsqlの使用 1-3
必須パッケージのインストール 必須パッケージのインストール 必須パッケージのインストール 必須パッケージのインストール
インストール後に、owaload.sqlスクリプトを使用して、追加の必須パッケージを手動でイ ンストールします。
1. owaload.sqlファイルが入っているディレクトリに移動します。このディレクトリは、
<ORACLE_HOME>/Apache/modpsql/owaです。
2. SQL*Plusを使用して、SYSユーザーでOracleデータベースにログインします。
3. 別のOWAパッケージがSYSに存在する場合は、次の問合せを実行して、OWAパッ ケージの全インスタンスのリストを作成します。
select object_name, owner from all_objects where object_name like 'HTP%';
他のスキーマで複数のインスタンスが検出された場合は、OWAパッケージをインス トールする前に、他のバージョンをアンインストールしてください。
4. SQLプロンプトで、次のコマンドを実行します。
@owaload.sql log_file
5. ログ・ファイルをスキャンして、エラーがないことを確認します。
注意 注意注意
注意: エクスポート・ユーティリティを使用して全データベースのエク スポートを実行した場合でも、OWALOAD.SQLスクリプトをSYSで実行 して、新規のターゲット・インスタンスにmod_plsqlを再インストールす る必要があります。インポート/エクスポート・メカニズムでは、SYS内 のオブジェクトはインポートされないため、PL/SQLツールキットをSYS にインストールする必要があります。
表表表
表 1-1 必須パッケージのインストール時のパラメータ必須パッケージのインストール時のパラメータ必須パッケージのインストール時のパラメータ必須パッケージのインストール時のパラメータ エレメント
エレメントエレメント
エレメント 説明説明説明説明
owaload.sql PL/SQL Web ToolkitパッケージをSYSスキーマにインストール します。また、データベースの全ユーザーがアクセスできるよう、
パブリック・シノニムを作成してパッケージをパブリックにしま す。このため、1つのデータベースにつき1回のインストールの み必要です。
log_file インストール・ログ・ファイルです。ログ・ファイルを作成する
ための書込み許可があることを確認してください。
必須パッケージのインストール
6. 手動で再コンパイルします。
7. インストール後、「Select owa_util.get_version from dual」を実行して、OWAパッケー ジのバージョンをチェックします。表示されたバージョンが9.0.2.1.0以上であることを 確認してください。
Oracle9i Application Server または または または または WebDB リスナーからのアップグレード リスナーからのアップグレード リスナーからのアップグレード リスナーからのアップグレード
Oracle9i Application ServerまたはWebDBリスナー2.5以下をすでに実行している場合
は、次の処理を実行します。
1. そのスキーマに(PL/SQL Web Toolkitパッケージ以外の)ユーザー・データがな いことを確認します。
2. 以前のPL/SQL Web Toolkitパッケージがインストールされているそのスキーマを
削除します。
3. 1-3ページの「必須パッケージのインストール」の説明に従って、新規のPL/SQL
Web Toolkitをインストールします。
注意注意注意
注意: owaloadスクリプトは、データベース内にあるOWAパッケージ
の既存のバージョンをチェックし、次の場合にのみ新しいバージョンをイ ンストールします。
■ OWAパッケージが存在しない場合、または
■ 古いバージョンのOWAパッケージが検出された場合
データベースに最新のOWAパッケージが存在する場合、または新し いバージョンがインストールされている場合、owaloadスクリプトは 何も処理を実行せず、その状況をログ・ファイルにレポートします。
注意 注意注意
注意: OWAパッケージをインストールすると、依存オブジェクトはす べて無効になります。このパッケージは最初のアクセス時に自動的に再コ ンパイルされますが、再インストール後に手動で再コンパイルすることを お薦めします。
mod_plsqlの設定ページへのアクセス
mod_plsqlの使用 1-5
mod_plsql の設定ページへのアクセス の設定ページへのアクセス の設定ページへのアクセス の設定ページへのアクセス
すべての監視および設定は、Oracle Enterprise Manager(OEM)ツールを使用して行いま
す。 mod_plsqlの監視および設定には、HTTPサーバーの構成要素内のリンク、およびポー
タルからアクセスできます。
mod_plsqlの設定ページにアクセスするには、OEMから該当のApplication Serverに移動
します。ページには、ポータル・インスタンス、またはHTTPサーバー・インスタンス内の リンクからアクセスできます。
OEM から から から から DAD 設定ページへのアクセス 設定ページへのアクセス 設定ページへのアクセス 設定ページへのアクセス
1. Webブラウザで次のURLを入力します。
http://<hostname>:<port_number>
2. Oracle9i Application Serverの管理者のユーザー名とパスワードを入力します。管理者
ユーザーのデフォルトのユーザー名は、ias_adminです。デフォルトのパスワードは、
Oracle9iASのインストール時に定義されます。
3. 「「「「OK」」」」をクリックします。
4. mod_plsqlとともに設定が必要なOracle9i Application Serverのインスタンスを選択し
ます。
5. HTTPサーバーのリンク、またはPortalインスタンスを選択します。
6. PL/SQL propertiesまたはmod_plsqlサービスを選択します。
7. 「「DAD 状態」「「 状態」状態」セクションにスクロールします。状態」
8. 「作成」「作成」をクリックして新規の「作成」「作成」 DADを設定するか、またはアクセスするDADの名前を クリックします。
注意 注意注意
注意: mod_plsqlおよびDAD設定については、Oracle Enterprise
Managerツールのオンライン・ヘルプも参照してください。
注意 注意注意
注意: デフォルトのポートは1810です。
mod_plsqlの設定ページへのアクセス
Portal から から から から DAD 設定ページへのアクセス 設定ページへのアクセス 設定ページへのアクセス 設定ページへのアクセス
1. Portalにログオンします。
2. 「ビルダー」「ビルダー」アイコンをクリックします。「ビルダー」「ビルダー」
3. 「管理」「管理」タブにアクセスします。「管理」「管理」
4. 「サービス」ポートレット内の「「「「Portalサービスの監視」サービスの監視」サービスの監視」サービスの監視」をクリックします。
5. 「Portalコンポーネント」セクションの「「「「mod_plsqlサービス」サービス」サービス」サービス」をクリックします。
6. 「「「「DAD状態」状態」セクションにスクロールします。状態」状態」
7. 「作成」「作成」をクリックして新規の「作成」「作成」 DADを設定するか、またはアクセスするDADの名前を クリックします。
mod_plsqlの概要 2-1
2
mod_plsql の概要 の概要 の概要 の概要
Oracle9i Application Serverは、Webアプリケーションの運用のためのオラクル社の中間層
製品群を1つのソリューションに統合します。 mod_plsqlは、Web上でのPL/SQLベースの アプリケーションの構築をサポートします。 PL/SQLストアド・プロシージャは、データ ベースからデータを取得し、Webブラウザで表示するデータとコードが含まれたHTTPレ スポンスを生成します。 mod_plsqlは、Oracle9iAS Portalなど、他のOracle製品もサポート しています。
クライアント・リクエストの処理
クライアント・リクエストの処理 クライアント・リクエストの処理 クライアント・リクエストの処理 クライアント・リクエストの処理
mod_plsqlは、データベースと通信を行うApacheのプラグインです。これによって、ブラ
ウザ・リクエストが、SQL*Net接続を通じてデータベース・ストアド・プロシージャ・コー ルにマッピングされます。通常、仮想パスの/plsで示されます。
次に、サーバーがクライアント・リクエストを受信するときのステップの概要を説明しま す。
1. Oracle HTTP Serverがクライアント・ブラウザからPL/SQL Server Pageリクエストを
受信します。
データベース・アクセス記述子(Database Access Descriptor: DAD)
mod_plsqlの概要 2-3
5. PL/SQLプロシージャは、データベースからアクセスしたデータおよびPL/SQL Web
Toolkitを使用して、HTMLページを生成します。
6. レスポンスがmod_plsqlに返されます。
7. Oracle HTTP Serverは、そのレスポンスをクライアント・ブラウザに送信します。
mod_plsqlから実行されたプロシージャは、HTTPレスポンスをクライアントに返します。
この作業を簡単にするために、mod_plsqlにはPL/SQL Web Toolkitが含まれています。
PL/SQL Web Toolkitには、OWAパッケージと呼ばれるパッケージのセットが含まれてい
ます。これらのパッケージをストアド・プロシージャ内で使用して、リクエスト情報の取得、
HTMLタグの作成およびクライアントへのヘッダー情報の返信を行います。すべてのユー ザーがアクセスできるように、このツールキットは共通スキーマにインストールします。
データベース・アクセス記述子(
データベース・アクセス記述子( データベース・アクセス記述子(
データベース・アクセス記述子(Database Access Descriptor:
DAD) ) ) )
各mod_plsqlリクエストは、データベース・アクセス記述子(DAD)に関連付けられてい
ます。DADは、データベース・アクセスに使用される設定値のセットです。DADにより、
次のような情報が指定されます。
■ データベース別名(Net8サービス名)
■ データベースがリモートの場合、その接続文字列
■ ドキュメントのアップロードおよびダウンロード用のプロシージャ
また、DADにはユーザー名とパスワードの情報を指定できます。指定がない場合には、
URLの実行時にユーザー名とパスワードを入力するプロンプトが表示されます。
mod_plsqlの実行
mod_plsql の実行 の実行 の実行 の実行
mod_plsqlをWebブラウザで実行するには、次の形式でURLを入力します。
protocol://hostname[:port]/DAD location/[[!][schema.][package.]proc_name[?query_
string]]
表表表
表 2-1 mod_plsql実行時のパラメータ実行時のパラメータ実行時のパラメータ実行時のパラメータ パラメータ
パラメータパラメータ
パラメータ 説明説明説明説明
protocol httpまたはhttpsのいずれかを使用できます。SSLの場合は、
httpsを使用します。
hostname Webサーバーが稼動しているマシンです。
port
(オプション)
アプリケーション・サーバーがリスニングしているポートです。
指定しない場合、ポート80が使用されます。
DAD location Webサーバーで設定したPL/SQLリクエストを処理するための仮
想パスです。
!記号
(オプション)
柔軟なパラメータの受渡しスキームを使用することを示します。
詳細は、2-8ページの「柔軟なパラメータの受渡し」を参照してく ださい。
schema
(オプション)
データベース・スキーマ名です。 指定しない場合、package.proc_
nameの名前解決は、URLリクエストを処理したデータベース・
ユーザーに基づいて行われます。
package
(オプション) PL/SQLストアド・プロシージャを含んだパッケージです。指定 しない場合、プロシージャはスタンドアロンになります。
proc_name 実行するPL/SQLストアド・プロシージャです。ファンクション
ではなく、プロシージャを指定する必要があります。IN引数のみ 使用可能です。
?query_string
(オプション)
ストアド・プロシージャのパラメータです。この文字列は、GET 方式の書式に従います。たとえば、次のようになります。
■ 複数のパラメータはアンパーサント(&)で区切ります。渡さ れる値内の空白文字はプラス(+)に置き換えられます。
■ HTMLフォームを使用して文字列を生成する場合(文字列を 自分で生成するのではなく)、書式化は自動的に行われます。
mod_plsqlの実行
mod_plsqlの概要 2-5 例例例
例1: DAD locationとしてpls/mydadがWebサーバーに設定されており、ブラウザが次の URLを送信したとします。
http://www.acme.com:9000/pls/mydad/mypackage.myproc
この場合、www.acme.comで稼動し、ポート9000でリスニングしているWebサーバーが リクエストを処理します。 Webサーバーは、リクエストを受信すると、そのリクエストを
mod_plsqlに渡します。
これは、そのWebサーバーがmod_plsqlを実行するように設定されていることが、
pls/mydadにより示されるためです。次に、mod_plsqlは、mydadに関連付けられている DADを使用して、mypackageに格納されているmyprocプロシージャを実行します。
例 例例
例2: URLを、DAD、スキーマまたはストアド・プロシージャ名を含めずに指定したとしま
す。
http://www.acme.com:9000/pls/mydad
この場合、mydadというDADのデフォルトのホーム・ページ(DADの設定ページで指定 されている)が表示されます。
POST 方式、 方式、 方式、 方式、 GET 方式および 方式および 方式および 方式および HEAD 方式 方式 方式 方式
HTTPプロトコルのPOST方式、GET方式およびHEAD方式は、パラメータ・データをア プリケーションに渡す方法(通常は名前/値ペア形式)をブラウザに対して指示します。パ ラメータ・データはHTMLフォームによって生成されます。
mod_plsqlアプリケーションでは、いずれの方式も使用できます。各方式のセキュアは、使
用する転送プロトコル(httpまたはhttps)によって決定されます。
■ POST方式を使用する場合、パラメータはRequest Body内で渡されます。大量のパラ メータ・データをサーバーに渡す場合は、通常、POST方式を使用します。
■ GET方式を使用する場合、パラメータは問合せ文字列を使用して渡されます。この方式 には、使用するオペレーティング・システムにより、名前/値ペアの値の長さが環境変 数の値の最大長を超えることができないという制限があります。さらに、オペレーティ ング・システムにより、定義できる環境変数の数も制限されます。
■ HEAD方式を使用する場合、GET方式と同じ機能を使用できます。唯一の違いは、
HTTPステータス行およびHTTPヘッダーのみが返されることです。コンテンツ・デー タは、ブラウザに返信されません。この方式は、リクエストが正しく処理されているか どうかの確認のみを行う監視ツールで有効です。
■ 複合モードでの使用 - mod_plsqlでは、一部のパラメータを問合せ文字列で渡し、それ 以外のパラメータをPOSTデータとして渡すことができます。たとえば、
procedure foo (a varchar2, b number)で、値vと1をそれぞれaとbに渡す場合は、次
の3つの方法で値を渡してURLを作成できます。
■ すべての値を問合せ文字列の一部として指定します。
http://host:port/pls/DAD/foo?a=v&b=1
トランザクション・モード
■ すべての値をPOSTデータの一部として指定します。
http://host:port/pls/DAD/foo, POST data="a=v&b=1"
■ 一部のパラメータはURLで指定し、それ以外のパラメータはPOSTデータで指定し ます。
http://host:port/pls/DAD/foo?a=v, POST data="b=1"
トランザクション・モード トランザクション・モード トランザクション・モード トランザクション・モード
プロシージャを実行するためにURLリクエストを処理した後、エラーがあれば、mod_plsql によりロールバックが実行されます。そうでない場合は、コミットが実行されます。このメ カニズムでは、トランザクションが複数のHTTPリクエストにまたがることはできません。
この状態を保持しないモデルの場合、アプリケーションは、通常HTTP Cookieまたはデー タベース表を使用して状態を維持します。
パラメータの受渡し パラメータの受渡し パラメータの受渡し パラメータの受渡し
mod_plsqlは、次の処理をサポートしています。
■ 名前によるパラメータの受渡し
プロシージャまたはファンクションを起動するURL内の各パラメータは、一意の名前 により識別されます。パラメータのオーバーロードがサポートされています。詳細は、
2-7ページの「名前によるパラメータの受渡し(パラメータのオーバーロード)」を参照 してください。
■ 柔軟なパラメータの受渡し
プロシージャの先頭に感嘆符(!)が付加されます。詳細は、2-8ページの「柔軟なパラ メータの受渡し」を参照してください。
■ 大きなパラメータ(最大32KB)の受渡し
詳細は、2-10ページの「大きなパラメータの受渡し」を参照してください。
パラメータの受渡し
mod_plsqlの概要 2-7
名前によるパラメータの受渡し(パラメータのオーバーロード)
名前によるパラメータの受渡し(パラメータのオーバーロード) 名前によるパラメータの受渡し(パラメータのオーバーロード)
名前によるパラメータの受渡し(パラメータのオーバーロード)
オーバーロードにより、名前が同じでパラメータの数、順序またはデータ型のファミリが異 なる複数のサブプログラム(プロシージャまたはファンクション)を使用できます。オー バーロードされたサブプログラムをコールすると、PL/SQLコンパイラは渡されたデータ型 に基づいて、どのサブプログラムをコールするかを決定します。
PL/SQLでは、ローカル・サブプログラムとパッケージ・サブプログラムをオーバーロード
できます。スタンドアロン・サブプログラムはオーバーロードできません。PL/SQLのオー バーロードの詳細は、Oracle9iデータベース・ドキュメントの『PL/SQLユーザーズ・ガイ ドおよびリファレンス』を参照してください。
パラメータ数が同じサブプログラムをオーバーロードする場合は、パラメータに違う名前を 付ける必要があります。 HTMLデータはデータ型に関連付けられないため、mod_plsqlは、
どのバージョンのサブプログラムをコールすればよいか判断できません。
たとえば、PL/SQLでは、プロシージャに対して同じパラメータ名を使用して、次の例に示 す2つのプロシージャを定義できますが、これをmod_plsqlで使用するとエラーが発生しま す。
-- legal PL/SQL, but not for mod_plsql 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 mod_plsql 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プロシー ジャがあるとします。このような場合でも、mod_plsqlはこの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つあります。
mod_plsqlがvalパラメータの値を1つだけ持つリクエストを受け取ると、スカラー・デー
タ型のプロシージャが実行されます。
例 例例
例1: 次のURLを送信して、スカラー・バージョンのプロシージャを実行するとします。
http://www.acme.com/pls/mydad/my_proc?val=john
mod_plsqlは、valパラメータの値が複数存在するリクエストを受け取ると、配列データ型
のプロシージャを実行します。
例 例例
例2: 次のURLを送信して、配列バージョンのプロシージャを実行するとします。
http://www.acme.com/pls/mydad/my_proc?val=john&val=sally
確実に配列バージョンを実行できるようにする場合は、HTMLページでHIDDENフォー ム・エレメントを使用してダミーの値を送信します。このダミーの値は、プロシージャ内で チェックされ、破棄されます。
柔軟なパラメータの受渡し 柔軟なパラメータの受渡し 柔軟なパラメータの受渡し 柔軟なパラメータの受渡し
mod_plsqlは、任意の数のエレメントが選択可能なHTMLフォームを処理するために、柔
軟なパラメータの受渡しをサポートします。 URLベースのプロシージャ実行で柔軟なパラ メータの受渡しを使用するには、URL内でプロシージャ名の先頭に感嘆符(!)を付加しま す。 2パラメータまたは4パラメータを使用できます。 2パラメータ・インタフェースによっ
て、mod_plsqlのパフォーマンスが改善されます。 4パラメータ・インタフェースは、互換
性維持のためにサポートされています。
パラメータの受渡し
mod_plsqlの概要 2-9 例
例例
例: 次のURLを送信したとします。
http://www.acme.com/pls/mydad/!scott.my_proc?x=john&y=10&z=doe
感嘆符(!)接頭辞により、柔軟なパラメータの受渡しを使用する必要があることをmod_
plsqlに知らせます。これにより、プロシージャscott.myprocが実行され、次の2つの引
数が渡されます。
name_array ==> (‘x’, ‘y’, ‘z’)
values_array ==> (’john’, ’10’, ’doe’)
4 パラメータ・インタフェース パラメータ・インタフェース パラメータ・インタフェース パラメータ・インタフェース
4パラメータ・インタフェースは、互換性維持のためにサポートされています。
procedure [proc_name] is
(num_entires IN NUMBER, name_array IN [array_type], value_array IN [array_type], reserved in [array_type]);
表表表
表 2-2 2パラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータ パラメータ
パラメータパラメータ
パラメータ 説明説明説明説明 proc_name
(必須)
実行するPL/SQLプロシージャの名前です。
name_array 問合せ文字列から取り出される名前(1から順番に索引付けされ
る)を送信された順序で示します。
value_array 問合せ文字列から取り出される値(1から順番に索引付けされる)
を送信された順序で示します。
array_type
(必須)
問合せ文字列から取り出される値(1から順番に索引付けされる)
を送信された順序で示します。
表表表
表 2-3 4パラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータ パラメータ
パラメータパラメータ
パラメータ 説明説明説明説明 proc_name
(必須)
実行するPL/SQLプロシージャの名前です。
num_entries 問合せ文字列内の名前/値ペアの数です。
name_array 問合せ文字列から取り出される名前(1から順番に索引付けされ
る)を送信された順序で示します。
value_array 問合せ文字列から取り出される値(1から順番に索引付けされる)
を送信された順序で示します。
パラメータの受渡し
例 例例
例: query_stringで名前xが重複している次のURLを送信したとします。
http://www.acme.com/pls/mydad/!scott.my_pkg.my_proc?x=a&y=b&x=c
感嘆符(!)接頭辞により、柔軟なパラメータの受渡しを使用することがmod_plsqlに指示 されます。これにより、プロシージャscott.my_pkg.myprocが実行され、次の2つの引 数が渡されます。
num_entries ==> 3
name_array ==> (‘x’, ‘y’, ‘x’);
values_array ==> (‘a’, ‘b’, ‘c’) reserved ==> ()
大きなパラメータの受渡し 大きなパラメータの受渡し 大きなパラメータの受渡し 大きなパラメータの受渡し
スカラー引数として渡される値と、varchar2引数の索引付き表の要素として渡される値に使 用できるサイズは、最大32KBです。
たとえば、柔軟なパラメータの受渡し(2-8ページの「柔軟なパラメータの受渡し」を参照)
を使用する場合、URLのquery_string部分の名前または値は、それぞれ実行されるプロ シージャのname_arrayまたはvalue_array引数のエレメントとして渡されます。これ らの名前または値に使用できるサイズは、最大32KBです。
reserved 未使用です。今後使用するために予約されています。
array_type
(必須)
varchar2型の表による任意のPL/SQL索引です(owa.vc_arrな ど)。
表 表表
表 2-3 4パラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータ(続き)パラメータ・インタフェースのパラメータパラメータ・インタフェースのパラメータ(続き)(続き)(続き)
パラメータ パラメータパラメータ
パラメータ 説明説明説明説明
ファイルのアップロードとダウンロード
mod_plsqlの概要 2-11
ファイルのアップロードとダウンロード ファイルのアップロードとダウンロード ファイルのアップロードとダウンロード ファイルのアップロードとダウンロード
mod_plsqlでは、次の機能を提供します。
■ キャラクタ・セットを変換せずに、ファイルをロー・バイト・ストリームとしてアップ ロードおよびダウンロードすることが可能です。ファイルは、ドキュメント表にアップ ロードされます。 PL/SQLアップロード・ハンドラ・ルーチンが適切な表の列を取得で きるよう、主キーが渡されます。
■ 異なるアプリケーションのファイルを混同しないよう、アプリケーションごとに1つ以 上、アップロードされるファイル用の表を指定することが可能です。
■ 問合せ文字列を使用しない形式のURL経由でこれらの表のファイルにアクセスすること が可能です。たとえば、次のようになります。
http://www.acme.com:9000/pls/mydad/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,
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列を追跡するために使用 されます。ドキュメントがアップロードされると、mod_plsqlにより、この列の値が型名に 設定されます。
たとえば、ドキュメントがBLOB_CONTENT列にアップロードされた場合、ドキュメント のCONTENT_TYPE列には文字列BLOBが設定されます。
LAST_UPDATED 列の意味 列の意味 列の意味 列の意味
LAST_UPDATED列には、ドキュメントの作成日時または最終更新日時が反映されます。ド キュメントがアップロードされると、mod_plsqlにより、ドキュメントのLAST_UPDATED 列にデータベース・サーバーの時間が設定されます。
その後、アプリケーションがドキュメントの内容または属性を変更する場合、 LAST_
UPDATEDの時間も更新されるようにする必要があります。
mod_plsqlでは、LAST_UPDATED列を使用して、HTTPクライアント(ブラウザ)がドキュ
メントのキャッシュ済みバージョンを使用できるかどうかをチェックし、HTTPクライアン トに結果を知らせます。これにより、ネットワークの通信量が削減され、サーバーのパ フォーマンスが改善されます。
ファイルのアップロードとダウンロード
mod_plsqlの概要 2-13
以前のスタイルのドキュメント表の定義 以前のスタイルのドキュメント表の定義 以前のスタイルのドキュメント表の定義 以前のスタイルのドキュメント表の定義
WebDB リリース2.xより前のリリースで使用されているドキュメント・モデルとの下位互
換性を維持するために、mod_plsqlでは、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について、次の設定パラメータがファイルのアップロードまたはダウンロードに関 係します。
PlsqlDocumentTablename
PlsqlDocumentTablenameパラメータは、このDADによってファイルがアップロードさ れたときにドキュメントを格納する表を指定します。
構文構文構文 構文:
PlsqlDocumentTablename [document_table_name]
例 例例 例:
PlsqlDocumentTablename my_documents
または
PlsqlDocumentTablename scott.my_document_table
PlsqlDocumentPath (ドキュメント・アクセス・パス) (ドキュメント・アクセス・パス) (ドキュメント・アクセス・パス) (ドキュメント・アクセス・パス)
PlsqlDocumentPathパラメータは、ドキュメントにアクセスするためのパス・エレメン トを指定します。PlsqlDocumentPathパラメータは、URL内でDAD名の後に付加されま す。たとえば、ドキュメント・アクセス・パスがdocsの場合、URLは次のようになりま す。
http://neon/pls/mydad/docs/myfile.htm
mydadはDAD名で、myfile.htmはファイル名です。
ファイルのアップロードとダウンロード
構文 構文構文 構文:
PlsqlDocumentPath [document_access_path_name]
PlsqlDocumentProcedure (ドキュメント・アクセス・プロシージャ) (ドキュメント・アクセス・プロシージャ) (ドキュメント・アクセス・プロシージャ) (ドキュメント・アクセス・プロシージャ)
PlsqlDocumentProcedureプロシージャは、アプリケーション指定のプロシージャです。
このプロシージャはパラメータがなく、ドキュメント・アクセス・パスを持つURLリクエ ストを処理します。ドキュメント・アクセス・プロシージャは、ファイルをダウンロードす るために、wpg_docload.download_file(filename)をコールします。ドキュメント・
アクセス・プロシージャは、URL指定に基づいてファイル名を認識します。たとえば、アプ リケーションでこれを使用して、ファイル・レベルのアクセス制御やバージョン管理を実装 することが可能です。このようなアプリケーションの例を、2-18ページの「ファイルのダウ ンロード」で示します。
構文 構文構文 構文:
PlsqlDocumentProcedure [document_access_procedure_name]
例 例例 例:
PlsqlDocumentProcedure my_access_procedure
または
PlsqlDocumentProcedure scott.my_pkg.my_access_procedure
PlsqlUploadAsLongRaw
DADパラメータPlsqlUploadAsLongRawは、ファイル拡張子に基づいてファイルのアッ プロードを設定します。PlsqlUploadAsLongRaw DADパラメータの値は、1行に1つの エントリがあるファイル拡張子のリストです。これらの拡張子を持つファイルは、mod_
plsqlにより、ドキュメント表のlong_raw型のCONTENT列にアップロードされます。他
の拡張子を持つファイルは、BLOB CONTENT列にアップロードされます。
ファイル拡張子には、テキスト・リテラル(jpeg、gifなど)またはアスタリスク(*)を使 用できます。アスタリスクは、PlsqlUploadAsLongRaw設定でリストされていない拡張子 を持つすべてのファイルに一致します。
構文 構文構文 構文:
PlsqlUploadAsLongRaw [file_extension]
ファイルのアップロードとダウンロード
mod_plsqlの概要 2-15 例例例
例:
PlsqlUploadAsLongRaw html PlsqlUploadAsLongRaw txt PlsqlUploadAsLongRaw *
ファイルのアップロード ファイルのアップロード ファイルのアップロード ファイルのアップロード
クライアント・マシンからデータベースにファイルを送信する場合は、次に示す内容を含ん だHTMLページを作成します。
■ enctype属性にmultipart/form-dataが設定され、action属性に「アクション・プロ
シージャ」と呼ばれるmod_plsqlプロシージャ・コールが関連付けられているFORM タグ。
■ type属性とname属性にfileが設定されたINPUTエレメント。 INPUT type="file"エ レメントを使用すると、ユーザーはファイル・システムのファイルを参照して、そこか らファイルを選択できます。
ユーザーが「「「「Submit」」」」ボタンをクリックすると、次のイベントが発生します。
1. ブラウザは、ユーザーが指定したファイルとその他のフォーム・データをサーバーに アップロードします。
2. mod_plsqlは、ファイルの内容をデータベースのドキュメント格納表内に格納します。
表の名前は、PlsqlDocumentTablename DADパラメータから導出されます。
3. FORMのaction属性で指定したアクション・プロシージャが、ファイルのアップロー
ドを行わずにmod_plsqlプロシージャを実行する場合と同じように実行されます。
次の例に、アップロードするファイルをユーザーがファイル・システムから選択可能な HTMLフォームを示します。このフォームには、ファイルに関する情報を入力できるその他 のフィールドも含まれています。
<html>
<head>
<title>test upload</title>
</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>
ファイルのアップロードとダウンロード
ユーザーがフォームの「「「Submit」「 」」ボタンをクリックすると、次の処理が実行されます。」 a. ブラウザにより、INPUT type="file"エレメントにリストされたファイルが
アップロードされます。
b. 次に、write_infoプロシージャが実行されます。
c. このプロシージャは、フォームのフィールドの情報をデータベース内の表に書き込 み、ページをユーザーに返します。
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がアップロー ドされた場合、mod_plsqlによって表に格納された名前は、
F9080/private/minutes.txtとなります。アプリケーションは、コールしたストアド・
プロシージャの中で、この名前を変更できます。たとえば、アプリケーションにより、名前 をscott/minutes.txtに変更できます。
注意 注意注意
注意: アクション・プロシージャは、ユーザーにレスポンスを返す必要は
ありませんが、次に示すように、送信が成功したか失敗したかをユーザー に知らせるようにすることをお薦めします。
ファイルのアップロードとダウンロード
mod_plsqlの概要 2-17
アップロード・ファイルの属性(
アップロード・ファイルの属性( アップロード・ファイルの属性(
アップロード・ファイルの属性( MIME タイプ)の指定 タイプ)の指定 タイプ)の指定 タイプ)の指定
ストアド・プロシージャは、アップロード・ファイルの名前を変更する以外にも、他のファ イル属性を変更できます。たとえば、2-15ページの「ファイルのアップロード」に示した例 のフォームでは、アップロードするドキュメントのMultipurpose Internet Mail Extension
(MIME)タイプをユーザーが入力するフィールドとして表示できます。
MIMEタイプは、write_infoのパラメータとして受信できます。その場合、ドキュメント 表には、ファイルのアップロード時にmod_plsqlがマルチパート・フォームから解析したデ フォルトのMIMEタイプではなく、そのドキュメントのMIMEタイプが格納されます。
複数のファイルのアップロード 複数のファイルのアップロード 複数のファイルのアップロード 複数のファイルのアップロード
1回の送信で複数のファイルを送信する場合は、アップロード・フォームに複数の<INPUT type="file" name="file">エレメントが含まれている必要があります。複数のINPUTエ レメントで、nameに同じ名前を定義する場合、アクション・プロシージャでパラメータ名
をowa.vc_arr型として宣言する必要があります。ファイルのINPUTエレメントに一意の名
前を定義することも可能で、その場合、アクション・プロシージャでそれぞれを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、ドキュメント・アクセス・プロ シージャにmydad.process_downloadが指定されている場合、ユーザーが次のURLをク リックすると、mydad.process_downloadプロシージャがコールされます。
http://www.acme:9000/pls/mydad/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;
mod_plsqlで実行中のプロシージャからwpg_docload.download_file(filename)を
コールすると、ファイルfilenameのダウンロードが開始されます。ファイルのダウンロー ド中は、このプロシージャによって生成される(HTPインタフェースを介して生成される)
他のHTMLは、ブラウザに返されません。
ファイルのアップロードとダウンロード
mod_plsqlの概要 2-19
BLOB のダイレクト・ダウンロード のダイレクト・ダウンロード のダイレクト・ダウンロード のダイレクト・ダウンロード
バイナリ・ラージ・オブジェクト(BLOB)データ型として格納されているコンテンツをダ ウンロードすることもできます。
1. wpg_docload.download_file(blob)をコールするストアド・プロシージャを作成します。
blobはBLOBデータ型です。 mod_plsqlには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 (
blob_name varchar2(128), blob_data blob
);
3. ユーザーに表示されるHTMLページには、適切な引数を使用してこのストアド・プロ シージャをコールするURLへのリンクが示されます。
4. BLOBのダイレクト・ダウンロード中は、このプロシージャによって生成される(HTP インタフェースを介して生成される)他のHTMLは、ブラウザに返されません。
パスのエイリアシング(ダイレクト・アクセスURL)
パスのエイリアシング(ダイレクト・アクセス パスのエイリアシング(ダイレクト・アクセス パスのエイリアシング(ダイレクト・アクセス
パスのエイリアシング(ダイレクト・アクセス URL ) ) ) )
パスのエイリアシングにより、mod_plsqlを使用するアプリケーションは、単純なURLに よるアプリケーション内のオブジェクトへの直接参照を提供できます。これにより、ドキュ メント・アクセス・パスとドキュメント・アクセス・プロシージャを使用して、アプリケー ション内のドキュメントに直接アクセスできます。たとえば、次のURLのdocsキーワード は、このリクエストがドキュメント・アクセスであることをmod_plsqlに知らせます。
protocol://hostname[:port]/DAD Location/docs/<FolderName/Document>
この例では、ドキュメント・アクセス・パスはdocsです。
パスのエイリアシングにより、ドキュメント以外のアプリケーション・オブジェクトに対し ても、同様にダイレクト・アクセスのための手段が提供されます。データベース・アクセス 記述子(DAD)の設定情報にある次の2つのフィールドで、パスのエイリアシングがサポー トされます。
■ Path Alias
■ Path Alias Procedure
mod_plsqlは、Path Aliasフィールドに入力されたキーワードを持つ受信URLを検出する
と、Path Alias Procedureフィールドに入力されたプロシージャを実行します。
たとえば、次のURLが受信URLで、Path Aliasがmyaliasに設定されている場合、mod_
plsqlは、Path Alias Procedureを実行します。これにより、キーワードmyalias以下すべ
てが、実行されるプロシージャに渡されます。
http://www.acme.com:9000/pls/mydad/myalias/foo/bar/foobar
パスのエイリアシングを使用するアプリケーションは、Path Alias Procedureを実装する必 要があります。プロシージャは、URLのキーワードmyaliasより後の部分
(foo/bar/foobar)を1つのパラメータとして受け取ります。これは、URLからオブジェ クトを間接参照するためです。
このプロシージャの名前と場所に制限はありませんが、受け取ることができるのは、
varchar2データ型の単一パラメータであるp_pathのみです。
Common Gateway Interface(CGI)環境変数
mod_plsqlの概要 2-21
Common Gateway Interface ( ( ( ( CGI )環境変数 )環境変数 )環境変数 )環境変数
OWA_UTILパッケージには、CGI環境変数の値を取得するためのAPIが付属しています。
CGI環境変数の値は、mod_plsqlによって実行されるプロシージャにコンテキストを提供し
ます。mod_plsqlはCGIによって処理されませんが、mod_plsqlから実行されるPL/SQL
アプリケーションは、これらのCGI環境変数にアクセス可能です。
表 表表
表 2-4 CGI環境変数環境変数環境変数環境変数
PL/SQLアプリケーションは、owa_util.get_cgi_envインタフェースを使用してCGI環境変
数の値を取得できます。
構文構文構文 構文:
owa_util.get_cgi_env(param_name in varchar2) return varchar2;
param_nameは、CGI環境変数の名前です。param_nameには大/小文字区別があります。
AUTHORIZATION PlsqlDocumentTablename
DAD_NAME REMOTE_ADDR
DOC_ACCESS_PATH REMOTE_HOST
HTTP_ACCEPT REMOTE_USER
HTTP_ACCEPT_CHARSET REQUEST_CHARSET(2-23ページの
「REQUEST_CHARSET CGI環境変数」を参照)
HTTP_ACCEPT_LANGUAGE REQUEST_IANA_CHARSET
HTTP_COOKIE REQUEST_METHOD
HTTP_HOST REQUEST_PROTOCOL
HTTP_PRAGMA SCRIPT_NAME
HTTP_REFERER SCRIPT_PREFIX
HTTP_USER_AGENT SERVER_NAME
PATH_ALIAS SERVER_PORT
PATH_INFO SERVER_PROTOCOL