...

Oracle Application Server PL/SQL アプリケーション開発者ガイド

by user

on
Category: Documents
1839

views

Report

Comments

Transcript

Oracle Application Server PL/SQL アプリケーション開発者ガイド
Oracle Application Server
PL/SQL アプリケーション開発者ガイド
リリース 4.0.8.2
2000 年 11 月
部品番号 : J01404-01
Oracle Application Server PL/SQL アプリケーション開発者ガイド , リリース 4.0.8.2
部品番号 : J01404-01
原本名:Oracle Application Server Release 4.0.8.2 Developer's Guide: PL/SQL Applications
原本部品番号:A66958-04
原本著者:Sanjay Singh
原本協力者:Sanjay Patil, Scott Christley, Jay Mojnidar
Copyright © 1996, 2000, Oracle Corporation. All rights reserved.
Printed in Japan.
制限付権利の説明
プログラムの使用、複製または開示は、オラクル社との契約に記された制約条件に従うものとします。
著作権、特許権およびその他の知的財産権に関する法律により保護されています。
当ソフトウェア(プログラム)のリバース・エンジニアリングは禁止されております。
このドキュメントの情報は、予告なしに変更されることがあります。オラクル社は本ドキュメントの無
謬性を保証しません。
* オラクル社とは、Oracle Corporation(米国オラクル)または日本オラクル株式会社(日本オラクル)
を指します。
危険な用途への使用について
オラクル社製品は、原子力、航空産業、大量輸送、医療あるいはその他の危険が伴うアプリケーション
を用途として開発されておりません。オラクル社製品を上述のようなアプリケーションに使用すること
についての安全確保は、顧客各位の責任と費用により行ってください。万一かかる用途での使用により
クレームや損害が発生いたしましても、日本オラクル株式会社と開発元である Oracle Corporation(米
国オラクル)およびその関連会社は一切責任を負いかねます。当プログラムを米国国防総省の米国政府
機関に提供する際には、『Restricted Rights』と共に提供してください。この場合次の Legend が適用さ
れます。
Restricted Rights Legend
Programs delivered subject to the DOD FAR Supplement are "commercial computer software" and use,
duplication and disclosure of the Programs 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-14, Rights in Data -- General, including Alternate III (June
1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.
このドキュメントに記載されているその他の会社名および製品名は、あくまでその製品および会社を識
別する目的にのみ使用されており、それぞれの所有者の商標または登録商標です。
目次
はじめに ..........................................................................................................................................................................
1
PL/SQL カートリッジの概要
設定情報 ...................................................................................................................................................................
通信経路 ...................................................................................................................................................................
POST 方式と GET 方式 ........................................................................................................................................
確保されているキーワード ...................................................................................................................................
2
1-1
1-3
1-4
1-5
チュートリアル
1. ストアド・プロシージャの作成およびデータベースへのロード ...............................................................
2. アプリケーションおよびそのコンポーネントの作成 ...................................................................................
3. リロード ...............................................................................................................................................................
4. アプリケーションの実行用の HTML ページの作成 ....................................................................................
3
vii
2-2
2-3
2-6
2-6
PL/SQL アプリケーションの追加と実行
PL/SQL アプリケーションの追加 ....................................................................................................................... 3-1
アプリケーションとカートリッジの追加 ................................................................................................... 3-2
Database Access Descriptor(DAD)の作成 ............................................................................................. 3-3
Oracle Application Server の開始と停止 .................................................................................................... 3-5
既存のアプリケーションへのカートリッジの追加 ................................................................................... 3-5
PL/SQL アプリケーションの設定 ....................................................................................................................... 3-7
「アプリケーション」の「設定」................................................................................................................... 3-7
「カートリッジ」の「設定」........................................................................................................................... 3-7
PL/SQL カートリッジの実行 ............................................................................................................................... 3-9
URL の形式 ...................................................................................................................................................... 3-9
iii
プロシージャの記述のキャッシュ ............................................................................................................. 3-10
プロシージャのオーバーロード ......................................................................................................................... 3-11
PL/SQL 配列のオーバーロード ................................................................................................................. 3-12
複数の値を持つ変数 .............................................................................................................................................
柔軟なパラメータの受渡し .................................................................................................................................
位置パラメータ .....................................................................................................................................................
SQL ファイルの実行 ............................................................................................................................................
PL/SQL ソース・ファイルの場所 .............................................................................................................
3-12
3-16
3-17
3-18
3-19
パラメータ ..................................................................................................................................................... 3-19
PL/SQL カートリッジのライフ・サイクル ..................................................................................................... 3-20
初期化 ............................................................................................................................................................. 3-20
認証 ................................................................................................................................................................. 3-20
実行 ................................................................................................................................................................. 3-21
シャットダウン ............................................................................................................................................. 3-21
4
PL/SQL Web Toolkit の使用
共通スキーマ ...........................................................................................................................................................
PL/SQL Web Toolkit のインストール ...............................................................................................................
PL/SQL Web Toolkit のパッケージ ...................................................................................................................
htp と htf ..........................................................................................................................................................
owa_image ......................................................................................................................................................
owa_opt_lock ..................................................................................................................................................
owa_custom ....................................................................................................................................................
owa_content ....................................................................................................................................................
4-1
4-2
4-4
4-5
4-6
4-6
4-6
4-7
PL/SQL Web Toolkit のパラメータ名の表記規則 ...........................................................................................
HTML タグの属性 .................................................................................................................................................
PL/SQL カートリッジとアプレット ...................................................................................................................
セッションと Cookie .............................................................................................................................................
LONG データ型 .....................................................................................................................................................
Inter-Cartridge Exchange(
(ICX)
)......................................................................................................................
htp パッケージと htf パッケージの拡張 ..........................................................................................................
ファイルのアップロードおよびダウンロード .................................................................................................
アップロード .................................................................................................................................................
4-8
4-8
4-8
4-9
4-9
4-10
4-10
4-11
4-11
ダウンロード ................................................................................................................................................. 4-14
文字列のマッチングと操作 ................................................................................................................................. 4-16
owa_pattern.match ...................................................................................................................................... 4-17
iv
owa_pattern.change ..................................................................................................................................... 4-18
5
認証とセキュリティ
動的なユーザー名 / パスワード認証 ....................................................................................................................
動的ユーザー名 / パスワードおよび Basic_Oracle 方式 ..................................................................................
PL/SQL カートリッジおよび認証サーバー方式 ...............................................................................................
カスタム認証 ...........................................................................................................................................................
OWA_SEC.GLOBAL .....................................................................................................................................
OWA_SEC.PER_PACKAGE .........................................................................................................................
OWA_SEC.CUSTOM .....................................................................................................................................
6
5-1
5-2
5-2
5-4
5-6
5-6
5-7
トランザクション
トランザクション・サービスのメカニズム ....................................................................................................... 6-2
例 ............................................................................................................................................................................... 6-3
7
その他
サポートされているデータ型 ............................................................................................................................... 7-1
NLS の拡張機能 ...................................................................................................................................................... 7-1
Oracle Web Application Server 3.x から Oracle Application Server 4.0 への PL/SQL カートリッジの
アップグレード ....................................................................................................................................................... 7-3
8
トラブルシューティング
PL/SQL アプリケーションの実行に関する問題 ...............................................................................................
データベースから生成されたエラー・メッセージの表示 ...............................................................................
未処理例外 ...............................................................................................................................................................
PL/SQL アプリケーションから生成された HTML の表示 .............................................................................
トレース・レベル ...................................................................................................................................................
エラー・レポート・レベル ...................................................................................................................................
8-1
8-2
8-2
8-2
8-4
8-5
索引
v
vi
はじめに
対象読者
このマニュアルは、Oracle Application Server の PL/SQL カートリッジを使用して Web ア
プリケーションを開発する方を対象にしています。
Oracle Application Server のドキュメント・セット
この表に、Oracle Application Server のドキュメント・セットのリストを示します。
マニュアル名
部品番号
Oracle Application Server 概要
J01413-01
Oracle Application Server 管理者ガイド
J01403-01
Oracle Application Server セキュリティ・ガイド
J01411-01
Oracle Application Server パフォーマンス・チューニング・ガイド
J01414-01
Oracle Application Server PL/SQL アプリケーション開発者ガイド
J01404-01
Oracle Application Server JServlet および JSP アプリケーション開発者ガイド
J01408-01
Oracle Application Server LiveHTML および Perl アプリケーション開発者ガイド
J01405-01
Oracle Application Server EJB、ECO/Java および CORBA アプリケーション開発者ガイド J01406-01
Oracle Application Server C++ CORBA アプリケーション開発者ガイド
J01407-01
Oracle Application Server PL/SQL Web Toolkit リファレンス
J01419-01
Oracle Application Server PL/SQL Web Toolkit クイック・リファレンス
J01420-01
Oracle Application Server JServlet Toolkit リファレンス
J01425-01
vii
マニュアル名
部品番号
Oracle Application Server JServlet Toolkit クイック・リファレンス
J01426-01
Oracle Application Server カートリッジ・マネージメント・フレームワーク
J01412-01
Oracle Application Server エラー・メッセージ
J00103-01
マニュアルの表記規則
次の表に、このマニュアルで使用される表記規則を示します。
表記規則
例
説明
太字
oas.h
owsctl
wrbcfg
www.oracle.com
ファイル名、
ユーティリティ、
プロセス、
および URL を表します。
斜体
file1
テキスト内の可変部分を表します。このプレー
スホルダを特定の値や文字列に置き換えます。
山カッコ
<filename>
コード内の可変部分を表します。このプレース
ホルダを特定の値や文字列に置き換えます。
固定幅フォント
owsctl start wrb
表示どおりに入力するテキスト。関数にも使用
します。
大カッコ
[-c string]
オプション項目を表します。
[on|off]
viii
オプション項目の選択肢がそれぞれ垂直バー
(|)で区切って示され、その中のいずれか 1 つ
を選択できます。
中カッコ
{yes|no}
必須項目の選択肢が垂直バー(|)で区切って示
されます。
省略記号
n,...
その前の項目を何回でも繰り返すことができる
ことを表します。
1
PL/SQL カートリッジの概要
PL/SQL カートリッジは、ユーザーがブラウザを使用して、Oracle データベースに格納され
ている PL/SQL プロシージャを実行できる環境を提供します。ストアド・プロシージャによ
り、データベースの表からデータを取り出して、クライアントのブラウザに返すデータが
入った HTML ページを生成できます。
PL/SQL は、リレーショナル・データベースの標準のデータ・アクセス言語である SQL に
Oracle のプロシージャ型言語を追加したものです。
内容
■
設定情報
■
通信経路
■
POST 方式と GET 方式
■
確保されているキーワード
設定情報
PL/SQL カートリッジを使用すると、Oracle データベースのストアド・プロシージャを実行
するアプリケーションを作成できます。図 1-1 のような設定情報をカートリッジに設定しま
す。
PL/SQL カートリッジの概要
1-1
設定情報
図 1-1 PL/SQL カートリッジの設定情報
PL/SQL カートリッジ
- 名前
- 仮想パス
- Database Access Descriptor
- 返すエラー・メッセージのレベル
- カートリッジを保護するかどうか
データベース名
NLS 情報
ユーザー名
パスワード
各 PL/SQL カートリッジは、Database Access Descriptor(DAD)に関連付けられています。
Database Access Descriptor(DAD)は、データベース・アクセスに使用する設定値の名前
付きのセットです。DAD は、次のような情報を指定します。
■
データベース名または SQL*Net V2 サービス名
■
ORACLE_HOME ディレクトリ
■
言語、ソート・タイプおよび日付言語などの NLS 設定情報
また、DAD にはユーザー名とパスワードを指定できます。指定がない場合には、URL の実
行時にユーザー名とパスワードを入力するプロンプトが表示されます。
データベース接続の情報は DAD に入っているため、複数のカートリッジが同じ DAD を使
用できます。DAD がデータベースを指定するため、接続先の各データベースごとに DAD
を定義できます。異なるレベルのエラー情報または異なるトランザクション・パラメータを
返す場合は、別の PL/SQL カートリッジが必要です。
Oracle Web Application Server 3.0 ユーザーへの注意 : Oracle
Application Server 4.0 では、PL/SQL Agent のコンセプトは使用されてい
ません。PL/SQL Agent の設定情報は、カートリッジ本体で設定されるよ
うになりました。
1-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
通信経路
通信経路
また、PL/SQL カートリッジは仮想パスに関連付けられます。この仮想パスを使用して PL/
SQL カートリッジを実行します。URL には、ストアド・プロシージャに必要なパラメータ
の値を含めることもできます。図 1-2 に URL の一部を示します。
図 1-2 PL/SQL カートリッジの URL の構造
http://www.acme.com/appname/cartname/get_emp?fname=chris
ドメイン
PL/SQL カートリッジ ストアド プロシージャ
の仮想パス
プロシージャ のパラメータ
それぞれ専用の設定値を持つ 1 つ以上の PL/SQL カートリッジを " アプリケーション " にグ
ループ化します。カートリッジは同じカートリッジ・サーバー・プロセス内で実行されるた
め、アプリケーションを使用して一連のカートリッジを全体として管理できます。たとえ
ば、カートリッジ・サーバーを停止することによってカートリッジを停止したり、アプリ
ケーション内の全カートリッジのロギング・レベルの設定およびプロセス内で実行可能な各
カートリッジのインスタンス数の指定などができます。
Oracle Application Server は、PL/SQL カートリッジ宛てのリクエストを受け取ると、次の
ような一連のステップを実行します(図 1-3)。
1.
リスナーはクライアントからリクエストを受け取り、そのリクエストを処理するコン
ポーネントを判断します。この場合は、カートリッジ宛てのリクエストであるため、こ
のリクエストを Web Request Broker(WRB)に転送します。
2.
WRB は、リクエストを処理する PL/SQL カートリッジを仮想パスから判断し、アプリ
ケーションを実行しているカートリッジ・サーバーにそのリクエストを送ります。
3.
カートリッジ・サーバーでは、PL/SQL カートリッジが DAD の設定値を使用して、接
続するデータベースおよび PL/SQL クライアントの設定方法を判断します。
4.
PL/SQL カートリッジはデータベースに接続し、コール・パラメータを準備してデータ
ベースのプロシージャを実行します。
5.
プロシージャは HTML ページを生成します。この HTML ページには静的データだけで
なく、データベースの表にアクセスして動的データを入れることができます。
6.
プロシージャからの出力は、レスポンス・バッファ経由で PL/SQL カートリッジとクラ
イアントに返されます。
PL/SQL カートリッジの概要
1-3
POST 方式と GET 方式
図 1-3 PL/SQL カートリッジから Oracle データベースへの接続
カートリッジから実行されたストアド・プロシージャは、HTML データをクライアントに返
す必要があります。この作業を簡単にするために、PL/SQL カートリッジには PL/SQL Web
Toolkit が付属しています。PL/SQL Web Toolkit は、ストアド・プロシージャ内でリクエス
ト情報の取得、HTML タグの作成およびクライアントへのヘッダー情報の返信などに使用可
能なパッケージのセットです。すべてのユーザーがアクセスできるように、ツールキットは
共通スキーマにインストールします。
PL/SQL カートリッジと DAD を設定するには、Oracle Application Server Manager を使用
します。Oracle Application Server Manager は HTML フォームのセットです。これらの
フォームを使用して、PL/SQL カートリッジの仮想パス、DAD の SQL*Net V2 サービス名、
エラー・レポートなどの設定情報を入力します。
アプリケーションの設計時に、セキュリティの問題を考慮する必要があります。許可されて
いないユーザーがそのアプリケーションへのアクセス権限を持たないようにし、許可されて
いるユーザーについても正しいコンテキストの場合のみアプリケーションを実行できるよう
にアプリケーションを設計する必要があります。詳細は、第 5 章「認証とセキュリティ」を
参照してください。
POST 方式と GET 方式
HTTP プロトコルの POST 方式と GET 方式は、ブラウザに対して、パラメータ・データを
アプリケーションに渡す方法(通常は名前と値のペア形式)を指示します。パラメータ・
データは、通常 HTML 形式で生成されます。
Oracle Application Server のアプリケーションでは、どちらの方式も使用できます。使用す
る方式の安全性は、使用する転送プロトコル(http または https)によって決定されます。
POST 方式を使用する場合、パラメータはリクエストの BODY で渡され、GET 方式を使用
する場合パラメータは問合せ文字列を使用して渡されます。これらの方式については、
HTTP 1.1 の仕様で説明されています。W3C の Web サイト http://www.w3.org/Protocols/
HTTP/1.1/draft-ietf-http-v11-spec-rev-01.txt を参照してください。
GET 方式には、使用するオペレーティング・システムにより、名前と値のペアの値の長さが
環境変数の値の最大長を超えることができないという制限があります。さらに、オペレー
ティング・システムにより、ユーザーが定義できる環境変数の数も制限されます。
1-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
確保されているキーワード
一般的に、大量のパラメータ・データをサーバーに渡す場合は、POST 方式を使用すること
をお薦めします。
確保されているキーワード
Oracle Application Server では、内部的に次のキーワードが使用されます。アプリケーショ
ンの開発時に、これらのキーワードを変数名、パラメータ名または Cookie 文字列に使用し
ないでください。使用した場合、予期しない結果が発生する可能性があります。
file
SessionID
SessionOR
SessionVpath
PL/SQL カートリッジの概要
1-5
確保されているキーワード
1-6 Oracle Application Server PL/SQL アプリケーション開発者ガイド
2
チュートリアル
この項では、データベースの表の内容を HTML テーブルとして表示する簡単なアプリケー
ションの作成と実行について、ステップごとに説明します。アプリケーションは、1 つの
PL/SQL カートリッジで構成されます。カートリッジは、PL/SQL Web Toolkit で定義済み
のファンクションおよびプロシージャをコールするストアド・プロシージャを実行します。
このチュートリアルでは、次の作業をステップごとに説明します。
1. ストアド・プロシージャの作成およびデータベースへのロード
2. アプリケーションおよびそのコンポーネントの作成
3. リロード
4. アプリケーションの実行用の HTML ページの作成
このチュートリアルの前提は、次のとおりです。
■
Oracle Application Server に "admin" ユーザーとしてログインできること。サーバーの
設定に新しい設定を追加するために必要です。
■
接続するデータベースに、すでに PL/SQL Web Toolkit がインストールされていること。
4-2 ページの「PL/SQL Web Toolkit のインストール」を参照してください。
■
データベースに "scott" スキーマがあること。PL/SQL カートリッジは、ユーザー名とパ
スワードに scott/tiger を使用してデータベースにログインします。"scott" スキーマが存
在しない場合は、データベースの既存のスキーマを使用するか、"CREATE SCHEMA"
コマンドを使用して "scott" スキーマを作成します。
スキーマはユーザー・アカウントと考えることができます。スキーマは表、ビュー、プ
ロシージャ、ファンクションなどのデータベース・オブジェクトの集まりで、スキーマ
内の各オブジェクトは同じスキーマ内の他のオブジェクトにアクセスできます。
チュートリアル
2-1
1. ストアド・プロシージャの作成およびデータベースへのロード
1. ストアド・プロシージャの作成およびデータベースへのロード
アプリケーションが実行するストアド・プロシージャは、current_users(次の例で定義
されている)です。このプロシージャは、all_users 表の内容を取り出し、HTML テーブ
ルとしてフォーマットします。
ストアド・プロシージャを作成するには、current_users.sql というファイルにプロシージャ
のテキストを保存し、次に Oracle Server Manager を実行してファイル内の文を読み込み、
実行します。
1.
次の行を入力して、このプロシージャを current_users.sql というファイルに保存しま
す。current_users プロシージャは、all_users 表の内容を取り出し、HTML テー
ブルとしてフォーマットします。
create or replace procedure current_users
AS
ignore boolean;
BEGIN
htp.htmlopen;
htp.headopen;
htp.title('Current Users');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Current Users');
ignore := owa_util.tablePrint('all_users');
htp.bodyclose;
htp.htmlclose;
END;
/
show errors
このプロシージャは、htp と owa_util パッケージのファンクションおよびプロシー
ジャを使用して HTML ページを生成します。たとえば、htp.htmlopen プロシージャ
は文字列 <html> を生成し、htp.title('Current Users') は <title>Current
Users</title> を生成します。
owa_util.tablePrint ファンクションは、指定されたデータベースの表を検索して、
その内容を HTML テーブルとしてフォーマットします。
2.
SQL*Plus を起動し、"scott" でデータベースに接続します。ORACLE_HOME は、
Oracle データベースのファイルが入っているディレクトリです。tnsname は、
tnsnames.ora ファイルにおけるデータベースの別名です。
prompt> $ORACLE_HOME/bin/sqlplus scott/tiger[@tnsname]
3.
current_users.sql ファイルから current_users ストアド・プロシージャをロードしま
す。current_users.sql ファイルが入っているディレクトリ以外のディレクトリから
Server Manager を起動した場合は、そのファイルのフルパスを指定する必要がありま
す。
2-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
2. アプリケーションおよびそのコンポーネントの作成
SQL> @current_users.sql
Procedure created.
No errors.
4.
SQL*Plus を終了します。
SQL> exit
2. アプリケーションおよびそのコンポーネントの作成
アプリケーションの作成時に、そのコンポーネントである PL/SQL カートリッジと DAD
(Database Access Descriptor)も作成します。これらのコンポーネントは、Oracle
Application Server Manager の管理フォームを使用して作成します。
1.
ブラウザを起動し、Oracle Application Server の「Welcome」ページを表示します。こ
のステップの詳細は、
『Oracle Application Server 管理者ガイド』を参照してください。
2. 「OAS Manager」をクリックして、マネージャ・ツールを表示します。
3.
サイト名の横の + をクリックして、そのサイトのコンポーネントを表示します。
「HTTP リスナー」、
「Oracle Application Server」および「アプリケーション」が表示さ
れます。
4. 「アプリケーション」をクリックして、右フレームにアプリケーションを表示します。
右フレームの「アプリケーション」ではなく、左フレームにサイトのアプリケーション
のリストが表示されるため、
「アプリケーション」の横の + はクリックしないでくだ
さい。
5.
右フレームのアプリケーション・ページで、
をクリックします。「アプリケーション
の追加」ダイアログ・ボックスが表示されます。
6. 「アプリケーションの追加」ダイアログ・ボックスで次の作業を行います。
■
「アプリケーション・タイプ」:「PL/SQL」を選択します。
■
「モードの設定」:「手動」を選択します。これにより、ダイアログ・ボックスを使
用して設定データを入力できます。他のオプション「ファイルから」は、アプリ
ケーションの設定データがすでにファイルに入力されていることを前提としていま
す。
■
「適用」をクリックします。
画面に「アプリケーションの追加」ダイアログ・ボックスが表示されます。
7. 「アプリケーションの追加」ダイアログ・ボックスで次の作業を行います。
■
「アプリケーション名」: "simpleApp1" と入力します。この名前は、アプリケーショ
ンを識別するために使用されます。
■
「表示名」: "plsql_tutorial" と入力します。この名前は、管理用フォームで使用され
ます。
チュートリアル
2-3
2. アプリケーションおよびそのコンポーネントの作成
■
「アプリケーションのバージョン」: "1.0" と入力します。
■
「適用」をクリックします。
「適用」をクリックすると「成功」ダイアログ・ボックスが表示され、カートリッ
ジをアプリケーションに追加できるボタンが表示されます。
8. 「成功」ダイアログ・ボックスで、
「このアプリケーションにカートリッジを追加」ボタ
ンをクリックします。
「PL/SQL カートリッジの追加」ダイアログ・ボックスが表示さ
れます。
9. 「PL/SQL カートリッジの追加」ダイアログ・ボックスで次の作業を行います。
■
「新規 DAD の作成」ボタンをクリックします。画面に、「Database Access
Descriptor」ダイアログ・ボックスが表示されます。DAD に、接続先のデータベー
スなどの接続情報、およびデータベースへログインするためのユーザー名やパス
ワードを設定します。ユーザーは、後でこの同じ DAD を使用してストアド・プロ
シージャを実行します。
10. 「Database Access Descriptor」ダイアログ・ボックスで次の作業を行います。
■
「DAD 名」: "scott" と入力します。
■
「データベース・ユーザー」: "scott" と入力します。
■
「データベース・ユーザーのパスワード」と「パスワードの確認」: "tiger" と入力し
ます。
■
「データベースの場所(ホスト)」: データベースが稼動しているホストを入力しま
す。
■
「データベース名(ORACLE_SID)」または「接続文字列」: データベースとアプリ
ケーションが同じマシンで実行されている場合、そのデータベースの
ORACLE_SID を指定します。別のマシンで稼動しているデータベースにアクセス
する場合は、かわりに「データベース・ネットワーク・サービス名」に SQL*Net
v2 接続文字列を入力します。
■
「新規データベース・ユーザーを作成する」: 未選択のままにします。
■
「データベースのパスワードを変更する」: 未選択のままにします。
■
「ユーザー名とパスワードを DAD に保管する」: このオプションを選択します。
■
「適用」をクリックします。
11. 「DBA アカウント情報」ダイアログ・ボックスで、次の作業を行います。
■
「DBA ユーザー名」:DBA ユーザー名を入力します。
■
「データベース・ユーザーのパスワード」と「パスワードの確認」
:DBA のパスワー
ドを入力します。
■
「適用」をクリックします。
2-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
2. アプリケーションおよびそのコンポーネントの作成
■
「成功」ダイアログ・ボックスで「OK」をクリックします。「PL/SQL カートリッ
ジの追加」ダイアログ・ボックスに戻ります。
12. 「PL/SQL カートリッジの追加」ダイアログ・ボックスで次の作業を行います。
■
「カートリッジ名」: "cart1" と入力します。この名前は、"simpleApp1" アプリケー
ション内で PL/SQL カートリッジを識別するために使用されます。
■
「表示名」: "tut_cart" と入力します。この名前は、管理用フォームで使用されます。
■
「仮想パス」: PL/SQL カートリッジの仮想パスとして /plsqlapp/user と入力します。
■
「物理パス」: このフィールドには、物理パスとして %ORAWEB_HOME%/bin が
表示されます。このフィールドは、このままにしておいてください。
■
「DAD 名」: "scott" という DAD を選択します。
■
「適用」をクリックしてカートリッジを保存します。
■
「成功」ダイアログ・ボックスで「OK」をクリックします。
次の図に、入力が完了したダイアログ・ボックスのサマリーを示します。ダイアログ・ボッ
クスのフィールドはカッコ内にリストされています。
図 2-1 PL/SQL アプリケーション、PL/SQL
カートリッジおよび DAD を作成するためのダイアロ
アプリケーション、
グ・ボックス
「アプリケーションの追加」
(
「PL/SQL」
「手動」)
、
「アプリケーションの追加」
(「アプリケーション名」
「表示名」、
、
「バージョン」
)
「成功」
(
「このアプリケーションにカートリッジを追加」ボタン)
「PL/SQL カートリッジの追加」ダイアログ・ボックス
「Database Access Descriptor」
:
「追加」
(ログイン・データ)
「DBA アカウント情報」
(「DBA ユーザー名」
および
「パスワード」)
「PL/SQL カートリッジの追加」ダイアログ・ボックス
(
「カートリッジ名」、
「表示名」
「仮想パス」、
、
「物理パス」、
「DAD 名」)
チュートリアル
2-5
3. リロード
3. リロード
Oracle Application Server を再設定した後に、サーバーをリロードして新規設定を有効にす
る必要があります。Oracle Application Server をリロードする方法は次のとおりです。
1.
Oracle Application Server Manager で「アプリケーション」を選択します。これによ
り、右フレームにアプリケーションのリストが表示されます。
2. 「すべて」を選択します。
3.
をクリックして、Oracle Application Server をリロードします。
また、新しい仮想パスが有効になるように、リスナーを停止して再起動する必要がありま
す。リスナーを停止して再起動する方法は次のとおりです。
1.
ナビゲーション・ツリーから「HTTP リスナー」をクリックし、リスナーのリストを表
示します。
2.
停止するリスナーを選択します。該当するアプリケーションのリクエストを処理するリ
スナーはすべて選択する必要があります。
3.
をクリックしてリスナーを停止します。
4.
をクリックしてリスナーを再起動します。
注意 : Oracle Application Server コンポーネントを停止して再起動した場
合は、リスナーも停止して再起動する必要があります。
4. アプリケーションの実行用の HTML ページの作成
current_users プロシージャを実行するには、ブラウザで次の URL を入力します。
http://<host>:<port>/plsqlapp/user/current_users
host と port には、そのカートリッジを認識するリスナーを指定します。これは、Oracle
Application Server 上のどのリスナーでもかまいませんが、Node Manager リスナー(デ
フォルトではポート 8888 上で実行)は含まれません。たとえば、デフォルトでポート 8889
で実行される Administration Utility リスナーを使用できます。
ただし、HTML ページからプロシージャを実行する方が一般的です。たとえば、次の
HTML ページには前述の URL をコールするリンクが含まれています。
<HTML>
<HEAD>
<title>Current Users</title>
</HEAD>
<BODY>
<H1>Current Users</H1>
2-6 Oracle Application Server PL/SQL アプリケーション開発者ガイド
4. アプリケーションの実行用の HTML ページの作成
<p><a href="http://<host>:<port>/plsqlapp/user/current_users">Run current_users</a>
</BODY>
</HTML>
図 2-2 に、ソース・ページ(ストアド・プロシージャを実行するリンクが含まれるページ)
と、current_users ストアド・プロシージャによって生成されるページを示します。
図 2-2 このチュートリアルのソース・ページおよび動的に生成される HTML ページ
ソース・ページ
current_users プロシージャによって
生成されるページ
チュートリアル
2-7
4. アプリケーションの実行用の HTML ページの作成
2-8 Oracle Application Server PL/SQL アプリケーション開発者ガイド
3
PL/SQL アプリケーションの追加と実行
この章では、Oracle Application Server に PL/SQL アプリケーションを追加する方法および
これをブラウザから実行する方法について説明します。
内容
■
PL/SQL アプリケーションの追加
■
PL/SQL アプリケーションの設定
■
PL/SQL カートリッジの実行
■
プロシージャのオーバーロード
■
複数の値を持つ変数
■
柔軟なパラメータの受渡し
■
位置パラメータ
■
SQL ファイルの実行
■
PL/SQL カートリッジのライフ・サイクル
PL/SQL アプリケーションの追加
Oracle Application Server に PL/SQL アプリケーションを追加するには、次のステップを実
行します。
1.
アプリケーションを追加する。
2.
アプリケーションにカートリッジを追加する。
3.
Oracle Application Server に Database Access Descriptor(DAD)を追加する。DAD
は、2 つ以上のカートリッジで共有できます。カートリッジの追加時または追加前に、
DAD を追加できます。
PL/SQL アプリケーションの追加と実行
3-1
PL/SQL アプリケーションの追加
アプリケーションとカートリッジの追加
次のステップにより、アプリケーションとカートリッジを Oracle Application Server に追加
できます。
1.
2.
ブラウザを起動し、Oracle Application Server の管理ページのトップ・ページを表示し
ます。
サイト名の横の + をクリックして、そのサイトのコンポーネントを表示します。
「Oracle Application Server」、
「HTTP リスナー」
、「アプリケーション」が表示されま
す。
3. 「アプリケーション」をクリックして、右フレームにアプリケーションを表示します。
右フレームの「アプリケーション」ではなく、左フレームにサイトのアプリケーション
のリストが表示されるため、
「アプリケーション」の横の + はクリックしないでくだ
さい。
4.
右フレームのアプリケーション・ページで、
をクリックします。「アプリケーション
の追加」ダイアログ・ボックスが表示されます。
5. 「アプリケーションの追加」ダイアログ・ボックスで次の作業を行います。
■
「アプリケーション・タイプ」:
「PL/SQL」を選択します。
■
「モードの設定」:「手動」を選択します。これにより、ダイアログ・ボックスを使
用して設定データを入力できます。他のオプション「ファイルから」は、アプリ
ケーションの設定データがすでにファイルに入力されていることを前提としていま
す。
■
「送信」をクリックします。
「アプリケーションの追加」ダイアログ・ボックスが表示されます。
6. 「アプリケーションの追加」ダイアログ・ボックスで次の作業を行います。
■
「アプリケーション名」:サーバーがアプリケーションを識別するために使用する名
前を入力します。
■
「表示名」: 管理用フォームで使用される名前を入力します。
■
「アプリケーションのバージョン」: アプリケーションのバージョン番号を入力しま
す。
■
「適用」をクリックします。
「適用」をクリックすると「成功」ダイアログ・ボックスが表示され、PL/SQL
カートリッジをアプリケーションに追加できるボタンが表示されます。
7. 「成功」ダイアログ・ボックスで、
「このアプリケーションにカートリッジを追加」ボタ
ンをクリックします。
「PL/SQL カートリッジの追加」ダイアログ・ボックスが表示さ
れます。
8. 「PL/SQL カートリッジの追加」ダイアログ・ボックスで次の作業を行います。
3-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL アプリケーションの追加
■
「カートリッジ名」: サーバーがアプリケーションの PL/SQL カートリッジを識別す
るために使用する名前を入力します。
■
「表示名」: 管理用フォームで使用される名前を入力します。
■
「仮想パス」: PL/SQL カートリッジの仮想パスを入力します。PL/SQL カートリッ
ジのデフォルトの仮想パスは、/<appName>/<cartName> です。
ユーザーは URL にこの仮想パスを指定して PL/SQL カートリッジを実行します。
この仮想パスはクラス・ファイルの場所にマッピングされています。
■
「物理パス」: PL/SQL カートリッジがストアド・プロシージャを実行する場合、こ
のフィールドはこのままにしておいてください。カートリッジが PL/SQL ソース・
ファイル(拡張子は ".sql")を実行する場合、PL/SQL ソース・ファイルのフルパ
スを入力します。PL/SQL ソース・ファイルの実行の詳細は、3-18 ページの「SQL
ファイルの実行」を参照してください。
■
「DAD 名」: この PL/SQL カートリッジが使用する、Database Access Descriptor の
名前を選択します。DAD が存在しない場合は、
「新規 DAD の作成」ボタンをク
リックして、DAD を作成できます。
■
「新規 DAD の作成」ボタン :「アプリケーションの追加」ダイアログ・ボックスが
表示されます。DAD に、接続先のデータベースなどの接続情報、およびデータ
ベースへログインするためのユーザー名やパスワードを設定します。ユーザーが
PL/SQL カートリッジを実行すると、カートリッジは DAD の情報を使用してスト
アド・プロシージャを実行するデータベースに接続します。DAD の詳細は、次の
項を参照してください。
Database Access Descriptor(
Descriptor(DAD)の作成
DAD)の作成
DAD は、実行するストアド・プロシージャが入っている Oracle データベースへの接続方法
に関する情報を提供します。各 PL/SQL カートリッジは、1 つの DAD に関連付けられてい
ます。
DAD には、データベース名(ORACLE_SID またはネットワーク・サービス名)とデータ
ベースのホスト・マシンなどに関する情報が含まれます。また、データベースのユーザー名
とパスワード情報も設定できます。設定しない場合は、この情報を入力するプロンプトが表
示されます。
DAD を Oracle Application Server に追加するには、「DAD: 追加」ダイアログ・ボックスを
使用します。このダイアログ・ボックスには、次の 2 つの場所からアクセスできます。
■
■
「PL/SQL カートリッジの追加」ダイアログ・ボックスの「新規 DAD の作成」ボタン。
ナビゲーション・ツリーの「Oracle Application Server」の下の「DB Access
Descriptor」フォームの
アイコン。
「DAD: 追加」ダイアログ・ボックスで次の作業を行います。
■
「DAD 名」: DAD の名前を入力します。
PL/SQL アプリケーションの追加と実行
3-3
PL/SQL アプリケーションの追加
■
「データベース・ユーザー」: データベースへのログインに使用するユーザー名を入力し
ます。
■
「データベース・ユーザーのパスワード」と「パスワードの確認」: そのユーザー名のパ
スワードを入力します。
■
「データベースの場所(ホスト)」: データベースの ORACLE_HOME のファイルがある
マシンを入力します。
■
「データベース名(ORACLE_SID)」: データベースとアプリケーションが同じマシンで
実行されている場合、そのデータベースの ORACLE_SID を指定します。
■
「接続文字列」: 別のマシンで稼動しているデータベースにアクセスする場合、SQL*Net
v2 の接続文字列を入力します。
■
「新規データベース・ユーザーを作成する」: 指定したユーザー名がデータベースに存在
しない場合は、このオプションを選択します。このオプションを選択し、かつ(以前の
リリースではなく)このリリースで PL/SQL Web Toolkit をインストールした場合、新
規ユーザーにはコンテンツ・サービス・データベース・オブジェクトへのアクセスに必
要な権限が付与されます。
■
「データベースのパスワードを変更する」: そのユーザー名のパスワードを変更する場合
に選択します。
■
「ユーザー名とパスワードを DAD に保管する」: ユーザー名とパスワードを DAD に保存
する場合、この DAD を使用するカートリッジは、すべてこれらの値を使用してデータ
ベースにログインし、入力用プロンプトは表示されません。ユーザー名とパスワード情
報を DAD に保存しない場合、カートリッジがデータベースにログインする必要が生じ
ると、ユーザー名とパスワード情報を入力するプロンプトが表示されます。
■
「適用」をクリックします。
注意 : 追加したアプリケーションをナビゲーション・ツリーに表示する
には、[Shift] キーを押しながらブラウザの「リロード」ボタンをクリック
します。
次の図に、入力が完了したダイアログ・ボックスのサマリーを示します。ダイアログ・ボッ
クスのフィールドはカッコ内にリストされています。
3-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL アプリケーションの追加
図 3-1 PL/SQL アプリケーション、PL/SQL
カートリッジおよび DAD を作成するためのダイアロ
アプリケーション、
グ・ボックス
「アプリケーションの追加」
(「PL/SQL」、
「手動」)
「アプリケーションの追加」
(「アプリケーション名」
「表示名」
、
「バージョン」)
、
「成功」
(「このアプリケーションにカートリッジを追加」ボタン)
「PL/SQL カートリッジの追加」ダイアログ・ボックス
(「カートリッジ名」
「表示名」
、
「仮想パス」、
、
「物理パス」
「DAD 名」)
、
「DAD の追加」
(データベース・ログイン・データ)
Oracle Application Server の開始と停止
Oracle Application Server にアプリケーションを追加した後に Web リスナーと Web Request
Broker(WRB)を停止して再起動する必要があります。詳細は、第 2 章「チュートリアル」
の「3. リロード」を参照してください。
既存のアプリケーションへのカートリッジの追加
PL/SQL アプリケーションは 1 つ以上のカートリッジを持つことができます。アプリケー
ションが複数のデータベースにアクセスする必要がある場合は、PL/SQL アプリケーション
に複数のカートリッジが必要です。
カートリッジを PL/SQL アプリケーションに追加するには、次のステップを実行します。
1.
ナビゲーション・ツリーで、カートリッジの追加先の PL/SQL アプリケーションの下の
「カートリッジ」を選択します。
PL/SQL アプリケーションの追加と実行
3-5
PL/SQL アプリケーションの追加
図 3-2 既存のアプリケーションへの PL/SQL カートリッジの追加
をクリックして、
「カートリッジの追加」ダイアログ・ボックスを表示します。
2.
3. 「カートリッジの追加」ダイアログ・ボックスで次の作業を行います。
■
「モードの設定」: 「手動」を選択します。
■
「適用」をクリックすると「PL/SQL カートリッジの追加」ダイアログ・ボックス
が表示されます。
4. 「PL/SQL カートリッジの追加」ダイアログ・ボックスで次の作業を行います。
■
「カートリッジ名」: サーバーがアプリケーションの PL/SQL カートリッジを識別す
るために使用する名前を入力します。
■
「表示名」: 管理用フォームで使用される名前を入力します。
■
「仮想パス」: PL/SQL カートリッジの仮想パスを入力します。PL/SQL カートリッ
ジのデフォルトの仮想パスは、/<appName>/<cartName> です。
■
「物理パス」: PL/SQL カートリッジがストアド・プロシージャを実行する場合、こ
のフィールドはこのままにしておいてください。カートリッジが PL/SQL ソース・
ファイル(拡張子は ".sql")を実行する場合、PL/SQL ソース・ファイルのフルパ
スを入力します。PL/SQL ソース・ファイルの実行の詳細は、3-18 ページの「SQL
ファイルの実行」を参照してください。
■
「DAD 名」: この PL/SQL カートリッジが使用する、Database Access Descriptor を
選択します。DAD は、カートリッジが接続するデータベースを指定します。DAD
が存在しない場合は、
「新規 DAD の作成」ボタンをクリックして、DAD を作成で
きます。
■
「適用」をクリックします。
3-6 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL アプリケーションの設定
注意 : 追加した新規カートリッジをナビゲーション・ツリーに表示する
には、[Shift] キーを押しながらブラウザの「リロード」ボタンをクリック
します。
次の図に、入力が完了したダイアログ・ボックスのサマリーを示します。ダイアログ・ボッ
クスのフィールドはカッコ内にリストされています。
図 3-3 PL/SQL カートリッジを追加するためのダイアログ・ボックス
「カートリッジの追加」
(
「手動」)
「PL/SQL カートリッジの追加」ダイアログ・ボックス
(
「カートリッジ名」、
「表示名」
「仮想パス」、
、
「物理パス」
「DAD 名」)
、
「DAD の追加」
(データベース・ログイン・データ)
PL/SQL アプリケーションの設定
設定用フォームは、
「アプリケーション」の「設定」と「カートリッジ」の「設定」の 2 つ
のセクションに分かれています。
「アプリケーション」の「設定」セクションのフォームに
は、アプリケーション全体に適用されるパラメータが入っています。一方、
「カートリッジ」
の「設定」セクションのフォームには、特定のカートリッジにのみ適用されるパラメータが
入っています。
「アプリケーション」の「設定」
「アプリケーション」の「設定」パラメータは、すべてのタイプのアプリケーションについ
て同じであるため、
『Oracle Application Server 管理者ガイド』の第 8 章「アプリケーション
の管理」で説明します。
「カートリッジ」の「設定」
PL/SQL カートリッジの「カートリッジ」の「設定」セクションには「仮想パス」と
「PL/SQL パラメータ」の 2 つのフォームが含まれます。
「仮想パス」フォーム
各 PL/SQL カートリッジは仮想パスにマップされ、ユーザーは URL にこの仮想パスを指定
してカートリッジを実行します。PL/SQL カートリッジの仮想パスのコンポーネントの最後
に、実行するストアド・プロシージャを指定します。たとえば、仮想パス /hr/benefits を
PL/SQL アプリケーションの追加と実行
3-7
PL/SQL アプリケーションの設定
PL/SQL カートリッジにマップすると、/hr/benefits/intro という URL によって、"intro" ス
トアド・プロシージャが実行されます。URL の詳細は、3-9 ページの「PL/SQL カートリッ
ジの実行」を参照してください。
PL/SQL カートリッジのデフォルトの仮想パスは、/<appName>/<cartName> です。
「仮想
パス」フォームを使用して、この仮想パスを変更できます。
Oracle Web Application Server 3.0 では、仮想パスに PL/SQL Agent の名前を入れる必要が
ありました。Oracle Application Server 4.0 では、仮想パスは任意に設定可能です。各 PL/
SQL カートリッジは、データベース接続情報を含んだ DAD に関連付けられています。
仮想パスの管理を簡単にするために、独自の表記規則を使用できます。たとえば、デフォル
トの表記規則である /appname/cartname を使用できます。appname には PL/SQL アプリケー
ションの名前を指定し、cartname には PL/SQL カートリッジの名前を指定します。仮想パス
に必ずしも 2 つのコンポーネントを指定する必要はない点に注意してください。必要な数だ
けコンポーネントを指定できます。
「仮想パス」フォームの詳細は、『Oracle Application Server 管理者ガイド』の第 8 章「アプ
リケーションの管理」を参照してください。
「PL/SQL パラメータ」フォーム
「PL/SQL パラメータ」フォームを使用して、次の内容を指定できます。
■
PL/SQL カートリッジに関連付けられる DAD
■
保護を使用可能にするかどうか
■
エラーが発生した場合に表示する HTML ページ
■
エラーが発生した場合、どの程度のエラー情報をユーザーに表示するか
■
アップロードされたファイルが圧縮フォーマットで保管されるかどうか
図 3-4 「PL/SQL パラメータ」フォーム
3-8 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL カートリッジの実行
PL/SQL カートリッジの実行
ブラウザまたは HTML ページに URL を入力することにより、PL/SQL カートリッジを実行
します。
URL の形式
PL/SQL カートリッジを実行するには、次の形式の URL を使用する必要があります。
http://hostname[:port]/virtual_path/[package.]proc_name[?QUERY_STRING]
詳細は次のとおりです。
■
hostname には、Oracle Application Server が稼動しているマシンを指定します。
■
port には、Oracle Application Server がリスニングしているポートを指定します。指定
しない場合、ポート 80 が使用されます。
■
virtual_path には、PL/SQL カートリッジにマップされている仮想パスを指定します。仮
想パスにはコンポーネントをいくつでも含めることが可能で、その中に文字列 "plsql"
を使用する必要はありません。
(これは、Oracle Web Application Server 3.0 でも必須要
件ではありませんでした。
)
■
package には、プロシージャが含まれているパッケージ(存在する場合)を指定します。
指定がない場合、プロシージャはスタンドアロンになります。
■
proc_name には、実行するストアド・プロシージャを指定します。ファンクションでは
なく、プロシージャを指定する必要があります。
■
QUERY_STRING は、ストアド・プロシージャのパラメータ(存在する場合)を指定し
ます。文字列は GET 方式のフォーマットに従って指定します。たとえば、複数のパラ
メータは & 文字で区切り、渡される値の中の空白文字は + 文字に置き換えます。HTML
フォームを使用して文字列を生成する場合(文字列を自分で生成するのではなく)は、
自動的にフォーマットされます。
たとえば、ブラウザが次の URL を送信すると
http://www.acme.com:9000/mycartx/
get_emp?fname='john'&lname='doe'&role='office+manager'
www.acme.com 上で稼動し、ポート 9000 でリスニングしている Oracle Application Server
がリクエストを処理します。リスナーはリクエストを受け取ると、それを WRB に渡します。
これは、/mycartx の仮想パスが PL/SQL アプリケーション内の PL/SQL カートリッジを
コールするよう設定されているとリスナーが認識するためです。WRB は、その PL/SQL ア
プリケーションを実行しているカートリッジ・サーバーにそのリクエストを送信します。
PL/SQL カートリッジ・インスタンスは、そのカートリッジに関連付けられている DAD を
使用してデータベースに接続し、get_emp ストアド・プロシージャを実行します。そのプ
ロシージャの fname パラメータには値 john、lname パラメータには値 doe、role パラメータ
PL/SQL アプリケーションの追加と実行
3-9
PL/SQL カートリッジの実行
には値“office manager“が入ります。空白文字は、カートリッジが値を参照する前に
元に戻されます。
パラメータの受渡しは名前で行われるため、通常は URL または HTTP ヘッダーで PL/SQL
のパラメータが指定される順序を考慮する必要はありません。ただし、このルールには例外
が 2 つあります。
■
■
同じ名前の複数のパラメータが存在する可能性がある。これは、同じ名前を持つ複数の
エレメントが含まれている HTML フォームで発生する可能性があります。この場合、
パラメータは PL/SQL 表として PL/SQL プロシージャに渡されます。3-12 ページの
「複数の値を持つ変数」を参照してください。
パラメータを位置で PL/SQL カートリッジに渡すことができる。3-17 ページの「位置パ
ラメータ」を参照してください。
プロシージャの記述のキャッシュ
PL/SQL カートリッジはプロシージャを実行する前に、リクエストされたプロシージャの記
述をデータベースから取得します。これは、実行するプロシージャの引数の型と数をチェッ
クするために行われます。ただし、プロシージャの記述は本番環境では変化しません。この
ため、プロシージャの記述をキャッシュすると、その分だけカートリッジからデータベース
へネットワーク上を往復する手間が省けます。
PL/SQL カートリッジは、デフォルトで、プロシージャの記述をキャッシュします。カート
リッジ・サーバー・プロセスにより記述がキャッシュされているときにプロシージャのプロ
トタイプを変更すると、それとキャッシュの内容が一致しなくなります。変更されたプロ
シージャの記述を表示するには、PL/SQL カートリッジ・サーバー・プロセスを再起動する
必要があります。
何らかの理由でプロシージャ・プロトタイプが頻繁に変更される必要があっても、そのたび
に PL/SQL カートリッジ・サーバー・プロセスを再起動するのは現実的ではありません。こ
のような場合は、プロシージャの記述のキャッシュをオフにしてください。次の行を手動で
wrb.app ファイルの RUNTIME.PLSQL セクションの下に追加することにより、プロシー
ジャの記述のキャッシュをオフにできます。
Cache_Proc_Desc
=
false
wrb.app の更新は、必ず Oracle Application Server をシャットダウンしてから行うよう注意
してください。
3-10 Oracle Application Server PL/SQL アプリケーション開発者ガイド
プロシージャのオーバーロード
プロシージャのオーバーロード
PL/SQL ではオーバーロードがサポートされています。オーバーロードでは、複数のサブプ
ログラム(プロシージャまたはファンクション)が同じ名前を持っていますが、パラメータ
の数、順序、データ型のファミリが異なります。オーバーロードされたサブプログラムを
コールすると、PL/SQL コンパイラは渡されたデータ型に基づいて、どのサブプログラムを
コールするかを判断します。PL/SQL では、ローカル・サブプログラムとパッケージ・サブ
プログラムをオーバーロードできますが、スタンドアロン・サブプログラムはオーバーロー
ドできません。PL/SQL のオーバーロードの詳細は、Oracle8 のドキュメントを参照してく
ださい。
PL/SQL カートリッジには、オーバーロードにおける PL/SQL の制約の他に、もう 1 つ制約
があります。パラメータ数が同じサブプログラムをオーバーロードする場合は、パラメータ
に違う名前を付ける必要があります。これは、HTML データはデータ型に対応していないた
め、カートリッジがどのバージョンのサブプログラムをコールすればよいかを判断できない
からです。たとえば、PL/SQL では次に示す 2 つのプロシージャを定義できますが、同じパ
ラメータ名になっているため、PL/SQL カートリッジでこれらのプロシージャを使用すると
エラーが発生します。
-- legal PL/SQL, but not for the PL/SQL cartridge
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 cartridge
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/mycart/my_pkg.my_proc?valvc2=input
2 番目のバージョンのプロシージャを実行する URL は次のようになります。
http://www.acme.com/mycart/my_pkg.my_proc?valnum=34
PL/SQL アプリケーションの追加と実行
3-11
複数の値を持つ変数
PL/SQL 配列のオーバーロード
パラメータ名が同じで、1 つのプロシージャのデータ型が owa_util.ident_arr、もう 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 つしかないリクエストを取得すると、ス
カラー・データ型のプロシージャが実行されます。val パラメータの値が複数存在するリク
エストを取得すると、配列データ型のプロシージャが実行されます。
例 1:次の URL を送信する場合
.../my_proc?val="john"
プロシージャのスカラー・バージョンが実行されます。
例 2:次の URL を送信する場合
.../my_proc?val="john"&val="sally"
プロシージャの配列バージョンが実行されます。
確実にプロシージャの配列バージョンを実行できるようにする場合は、HTML ページで隠し
フォーム・エレメントを使用してダミーの値を送信します。このダミーの値は、プロシー
ジャ内でチェックされ、破棄されます。例については、次の項を参照してください。
複数の値を持つ変数
ブラウザは、複数の値が入っている変数をサーバーに返すことができます。たとえば、
SELECT エレメントを使用する HTML フォームを使用すると、表示されたセットから 1 つ
以上の値を選択できます。また、NAME 属性に同じ値を持つ別のフォーム・エレメントを設
定できます。この場合、これらのエレメントの値は同じ変数名で返されます。
PL/SQL カートリッジは、PL/SQL 表に値を保管することによって複数の値を持つ変数を処
理します。これにより、ユーザーが選択できる値の数を自由に決めることができ、またユー
ザーが選択した値を 1 単位として容易に処理できます。それぞれの値は、PL/SQL 表の行に
索引 1 から開始して保管されます。複数の値を持つ変数の最初の値(問合せ文字列に表示さ
れる順序で)は索引 1、同じ変数の 2 番目の値は索引 2 というように設定されます。PL/
SQL 表の値の順序が重要となる処理がプロシージャ内にある場合は、その順序で問合せ文字
列に変数を指定する必要があります。
3-12 Oracle Application Server PL/SQL アプリケーション開発者ガイド
複数の値を持つ変数
値は位置ではなく名前によってプロシージャのパラメータに渡されるため、複数の値を持つ
変数がない場合は、値の順序を気にする必要はありません。
PL/SQL カートリッジ環境でパラメータとして使用される PL/SQL 表は、基本の型である
VARCHAR2 にする必要があります。Oracle では、VARCHAR2 を NUMBER、DATE また
は LONG などの他のデータ型に変換できます。VARCHAR2 変数の最大長は 32KB です。
少なくとも 1 つ以上の値が PL/SQL 表に送信されることが確実ではない場合には(たとえば
ユーザーがゼロ・オプションを選択できる場合)
、隠しフォーム・エレメントを使用して最
初の値を入力します。PL/SQL 表に値を入力しないとエラーになります。また、PL/SQL 表
にはデフォルト値を設定できません。
次の例では、複数の値を持つパラメータを PL/SQL 表に渡しています。このフォームには、
SELECT エレメントと 1 セットのチェック・ボックス・エレメントがあります。隠しエレメ
ントが 2 つある点に注意して下さい。1 つは SELECT エレメントに使用され、もう 1 つは
チェック・ボックスに使用されています。このフォームを作成する HTML は、次のとおり
です。
<html>
<head>
<title>Multivalue Example</title>
</head>
<body>
<h1>Multivalue Example</h1>
<p>This form shows how variables with multiple values are
handled by the PL/SQL Cartridge. The form has one SELECT
element and a set of checkbox elements.
<form method="PUT" action="/mycart/dept_machine">
<input type=hidden name="departments" value="no_value">
<input type=hidden name="machines" value="no_value">
<p>Select the departments in which you want to search:
<p>
<select name="departments" multiple>
<option>Benefits
<option>Marketing
<option>Finance
<option>Sales
<option>Engineering
<option>QA
<option>Customer Support
</select>
<p>Select the machine type:<br>
PL/SQL アプリケーションの追加と実行
3-13
複数の値を持つ変数
<input
<input
<input
<input
type=checkbox
type=checkbox
type=checkbox
type=checkbox
name="machines"
name="machines"
name="machines"
name="machines"
value="PC">PC<br>
value="Mac">Mac<br>
value="Sun">Sun<br>
value="Other">Other<br>
<p><input type=submit value="Search">
</form>
</body>
</html>
図 3-5 に、ブラウザに表示されるフォームを示します。
図 3-5 複数の値を渡すフォーム
ユーザーが「Search」をクリックすると、dept_machine プロシージャがデータベース上
で実行されます。このプロシージャは、ユーザーが選択した項目をリストした HTML ペー
ジを単純に返します。PL/SQL 表の索引 1 には隠しエレメントの値が入っているので、ルー
プ・カウンタは索引 2 から始まる点に注意してください。プロシージャが PL/SQL 表の行数
を出力する場合は、隠し行をカウントしないように 1 行差し引きます。
3-14 Oracle Application Server PL/SQL アプリケーション開発者ガイド
複数の値を持つ変数
create or replace procedure dept_machine (
departments IN owa_util.ident_arr,
machines
IN owa_util.ident_arr )
IS
counter INTEGER;
ct
INTEGER;
BEGIN
htp.htmlopen;
htp.headopen;
htp.title('Dept and Machines Results');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Dept and Machines Results');
ct := departments.COUNT - 1;
htp.print('The "departments" PL/SQL table has ' || ct || ' rows.');
htp.print('You selected:');
htp.ulistOpen;
FOR counter IN 2 .. departments.COUNT LOOP
htp.listItem(departments(counter));
END LOOP;
htp.ulistClose;
ct := machines.COUNT - 1;
htp.print('The "machines" PL/SQL table has ' || ct || ' rows.');
htp.print('You selected:');
htp.ulistOpen;
FOR counter IN 2 .. machines.COUNT LOOP
htp.listItem(machines(counter));
END LOOP;
htp.ulistClose;
htp.paragraph;
htp.bodyclose;
htp.htmlclose;
END;
/
show errors
たとえば、ユーザーが SELECT エレメントから「Benefits」と「Customer Support」を、
チェック・ボックスから「PC」、
「Mac」
、「Sun」を選択すると、このプロシージャは図 3-6
のページのような HTML ページを返します。
PL/SQL アプリケーションの追加と実行
3-15
柔軟なパラメータの受渡し
図 3-6 複数の値の例で生成されるページ
注意 : OCI では、VARCHAR2 の大きさに 2000 バイトという制限があり
ます。アプリケーション開発時には、この制限を考慮してください。
柔軟なパラメータの受渡し
ユーザーは、任意の数のエレメントを選択可能な HTML フォームを作成できます。これら
のエレメントの名前が異なる場合、可能な組合せを処理するためにオーバーロードされたプ
ロシージャを作成する必要があります。あるいは、かわりに隠しフォーム・エレメントを挿
入すると、ユーザーが選択するエレメントに関係なく、問合せ文字列の名前を毎回一貫させ
ることが可能です。
Oracle Application Server 4.0 では、問合せ文字列中の名前に一致するプロシージャが存在し
ない場合に PL/SQL カートリッジが実行するプロシージャを定義することにより、これが簡
単になりました。プロシージャには、問合せ文字列中の名前と値のペアすべてが渡されま
す。シグネチャは、次のとおりです。
proc_name(
num_entries
name_array
value_array
reserved
IN
IN
IN
IN
NUMBER,
OWA.vc_arr,
OWA.vc_arr,
OWA.vc_arr)
詳細は次のとおりです。
proc_name は、実行する PL/SQL プロシージャの名前です。
num_entries は、問合せ文字列の名前と値のペアの数を指定します。
name_array は、問合せ文字列の名前を指定します。
value_array は、問合せ文字列の値を指定します。
reserved は、現在使用されていません。今後の使用のために確保されています。
3-16 Oracle Application Server PL/SQL アプリケーション開発者ガイド
位置パラメータ
このプロシージャが未定義で、問合せ文字列中の名前がいずれのプロシージャにも一致しな
い場合は、エラー・メッセージが表示されます。
次に、問合せ文字列の名前と値のペアを出力するプロシージャの例を示します。
CREATE or REPLACE PROCEDURE MY_PROC (
num_entries IN NUMBER,
name_array IN OWA.vc_arr,
value_array IN OWA.vc_arr,
reserved
IN OWA.vc_arr)
IS
BEGIN
htp.htmlopen;
htp.headopen;
htp.title('Unmatched query string example');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Unmatched query string example');
htp.print('Query string has ' || num_entries ||
' name-value pairs.');
htp.dlistOpen;
FOR counter IN 1 .. num_entries
LOOP
htp.dlistTerm(name_array(counter));
htp.dlistDef(value_array(counter));
END LOOP;
htp.dlistClose;
htp.bodyclose;
htp.htmlclose;
END;
/
show errors
位置パラメータ
PL/SQL カートリッジがストアド・プロシージャに対するリクエストを受け取ると、データ
ベースの処理を 2 回行う必要があります。まず、データベースに接続して、指定したプロ
シージャが存在するかどうかを判断します。そのプロシージャが存在する場合は 2 番目の処
理に移り、データベースにそのプロシージャを実行するように指示します。
プロシージャがデータベースに存在することが確実にわかっている場合は、PL/SQL カート
リッジに検証ステップをスキップするように指示して、処理を省略できます。これを行うに
PL/SQL アプリケーションの追加と実行
3-17
SQL ファイルの実行
は、URL のプロシージャ名の前に ^ 文字を付けます。また、これにより、そのプロシー
ジャのパラメータは名前ではなく、位置によってマッチングされます。
たとえば、param1 と param2 の 2 つのパラメータを取る "my_proc" という名前のプロシー
ジャの場合、次の URL のいずれかを使用してそのプロシージャを実行できます。
/* usual style */
http://machine/mycart/my_proc?param1=val1&param2=val2
/* bypass procedure verification, parameters are matched by position */
http://machine/mycart/^my_proc?param1=val1&param2=val2
/* bypass procedure verification, parameter names do not have to match */
http://machine/mycart/^my_proc?x=val1&y=val2
/* for procedures in packages, the ^ character comes before the package name */
http://machine/mycart/^my_pkg.my_proc?x=val1&y=val2
通常の実行スタイルを使用する場合(つまり ^ がない場合)、パラメータは名前によって
マッチングされます。^ 文字を使用すると、パラメータは位置によってマッチングされま
す。これは、パラメータ名にどのような文字列でも使用できることを意味します。つまり、
パラメータ名をデータベース内の名前と完全に一致させる必要はありません。ただし、パラ
メータ数を一致させ、問合せ文字列に表示される値の順序に注意する必要があります。
柔軟なパラメータの受渡し機能(3-16 ページ)は、この位置パラメータの機能では動作しま
せん。パラメータの数が一致しない、またはプロシージャがない場合は、一般的なエラー・
メッセージが表示されますが、これはエラーを正確に指摘するものではありません。
SQL ファイルの実行
データベースに格納されている PL/SQL プロシージャを実行する以外に、PL/SQL カート
リッジは、PL/SQL ソース・ファイルをファイル・システムから実行することも可能です。
この機能を使用すると、PL/SQL 文をデータベースに格納しなくてもこれを実行できます。
PL/SQL コードのプロトタイプを作成する際にこの機能を使用することがあります。これに
より、プロシージャを編集するたびにデータベースにリロードする時間を節約できます。
ファイルには、ファンクションやプロシージャを定義しない、無名 PL/SQL ブロックが含ま
れます。ファイルは、DECLARE または BEGIN 文から始まります。ブロックで変数を使用す
る場合のみ、DECLARE 文が必要です。無名ブロックの詳細は、PL/SQL のマニュアルを参
照してください。
PL/SQL のファイル名には拡張子 ".sql" を付ける必要があります。この方法により、PL/
SQL カートリッジは、URL を読み込むときにファイル名とプロシージャ名を区別します。
この点以外は、カートリッジを使用してストアド・プロシージャを実行する場合と同じ構文
を使用します。
3-18 Oracle Application Server PL/SQL アプリケーション開発者ガイド
SQL ファイルの実行
ファイルは、データベースではなくカートリッジに格納されているため、
owa_util.showsource を使用して .sql ファイルの PL/SQL 文を表示できない点に注意し
てください。
注意 : PL/SQL カートリッジを使用してファイル・システムから SQL
ファイルを実行する場合、SQL ファイルの最後に "/" を付けることはでき
ません。ファイルの最後に "/" が付いている場合、PL/SQL カートリッジ
は、指定のファイルを実行できなくなります。
PL/SQL ソース・ファイルの場所
PL/SQL ソース・ファイルは、仮想パスに対応する物理パスに存在します。たとえば、仮想
パス /test/sql を物理パス %ORAWEB_HOME%/sample/plsql にマップする場合、次の URL
http://machine.domain.name:port/test/sql/mysqlfile.sql
は、ファイル %ORAWEB_HOME%/sample/plsql/mysqlfile.sql の PL/SQL 文を実行しま
す。/test/sql 仮想パスに関連付けられた PL/SQL カートリッジ設定情報は、データベースに
接続するために使用されます。
パラメータ
URL の問合せ文字列で、パラメータを名前と値のペアとして PL/SQL ソース・ファイルに
渡すことができます。PL/SQL コードでは、" バインド変数 " としてこれらの名前と値のペ
アにアクセスします。たとえば、次の URL の場合、
http://machine.domain.name:port/test/sql/mysqlfile.sql?first_name=john
コードで first_name 変数の前にコロンを付けることにより、first_name 変数の値にアクセス
できます。
declare
n varchar2(32);
begin
n := :first_name;
/* n is 'john' */
htp.htmlOpen;
htp.headOpen;
htp.title('Hello ' || n);
htp.headClose;
htp.bodyOpen;
htp.header(1, 'Sample for using .sql files');
htp.print('Hello ' || n);
htp.br;
htp.print('The URL is ' || owa_util.get_cgi_env('SCRIPT_NAME') ||
owa_util.get_cgi_env('PATH_INFO') );
htp.br;
PL/SQL アプリケーションの追加と実行
3-19
PL/SQL カートリッジのライフ・サイクル
htp.print('This is from file' || owa_util.get_cgi_env('PATH_TRANSLATED') );
htp.bodyClose;
htp.htmlClose;
end;
配列は、バインド変数としてサポートされないため、PL/SQL ファイルで配列をバインドす
ることはできません。
PL/SQL カートリッジのライフ・サイクル
この項では、PL/SQL カートリッジがリクエスト受信時に行う処理について説明します。こ
の項では、Web Request Broker(WRB)によって使用されるコールバック関数の知識がある
ことを前提としています。
PL/SQL カートリッジを使用するためにこの項の情報を把握しておく必要はありません。た
だし、カートリッジのアーキテクチャを理解する上では、この情報は役立ちます。
初期化
カートリッジ・サーバー・プロセスが起動されると、initRuntime コールバック関数が実行
され、アプリケーションの全カートリッジで使用するデータ構造体が初期化されます。
initCartridge コールバック関数は各カートリッジの最初のインスタンスの起動時に実行さ
れ、カートリッジの設定情報を読み込み、データベース接続情報を設定します。
各カートリッジのインスタンスの起動時には initInstance コールバック関数が実行され、リ
クエスト固有のデータが初期化されます。
認証
PL/SQL カートリッジがリクエストを受け取ると、authorize コールバック関数が実行され
ます。authorize 関数は次の処理を行います。
■
リクエストされたオブジェクトが認証方式または制限によって保護されているかどうか
を調べる。
■
DAD に正しいユーザー名 / パスワードの情報が含まれているかどうかを調べる。
■
含まれていない場合は、ユーザー名とパスワードを入力するプロンプトが表示され
ます。この関数は、入力されたユーザー名とパスワードを使用してデータベースに
ログインします。
■
含まれている場合、この関数はデータベースにログインし、owa_sec パッケージに
設定されている認証レベルをチェックし、カスタムまたはデータベース・レベルの
認証が指定されているかどうかを調べます(カスタム認証の詳細は、第 5 章「認証
とセキュリティ」を参照してください)
。カスタム認証が指定されている場合は、
ユーザーを認証するカスタム PL/SQL ファンクションが実行されます。
3-20 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL カートリッジのライフ・サイクル
実行
authorize コールバック関数が成功すると、次に exec コールバック関数がコールされます。
exec 関数は次の処理を行います。
■
CGI 環境変数の値を取得する。
■
実行する PL/SQL プロシージャを決定する。
■
プロシージャのパラメータを決定する。
■
変数をバインドする PL/SQL スクリプトを作成して、これを実行する。このスクリプト
はプロシージャを実行し、WRB 経由でクライアントに出力を書き出します。
シャットダウン
shutdown コールバック関数は、WRB によって自動的にコールされます。これにより、オー
プンしている接続はすべてクローズされます。
PL/SQL アプリケーションの追加と実行
3-21
PL/SQL カートリッジのライフ・サイクル
3-22 Oracle Application Server PL/SQL アプリケーション開発者ガイド
4
PL/SQL Web Toolkit の使用
内容
■
共通スキーマ
■
PL/SQL Web Toolkit のインストール
■
PL/SQL Web Toolkit のパッケージ
■
PL/SQL Web Toolkit のパラメータ名の表記規則
■
HTML タグの属性
■
PL/SQL カートリッジとアプレット
■
セッションと Cookie
■
LONG データ型
■
Inter-Cartridge Exchange(ICX)
■
htp パッケージと htf パッケージの拡張
■
ファイルのアップロードおよびダウンロード
■
文字列のマッチングと操作
共通スキーマ
PL/SQL カートリッジを使用する前に、Oracle データベースの "oas_public" という共通ス
キーマに、PL/SQL Web Toolkit のパッケージをインストールする必要があります。Oracle
Application Server のインストール時に PL/SQL Web Toolkit をインストールできます。ま
た、Oracle Application Server のインストール後に Oracle Application Server の管理フォー
ムを使用してインストールすることも可能です。
パッケージをロードするスキーマは、Oracle Web Application Server 3.0 と Oracle
Application Server 4.0 では変更されています。Oracle Web Application Server 3.0 では、
PL/SQL カートリッジによってアクセスされるスキーマごとにパッケージをロードする必要
PL/SQL Web Toolkit の使用
4-1
PL/SQL Web Toolkit のインストール
がありました。Oracle Application Server 4.0 では、共通スキーマ "oas_public" にパッケージ
をロードし、ユーザーがこの共通スキーマのオブジェクトを実行できるように、パブリッ
ク・シノニムが使用されます。ユーザーは、共通スキーマの権限ではなく、自分の権限を使
用して共通スキーマのオブジェクトを実行します。
図 4-1 PL/SQL Web Toolkit の共通スキーマ
ユーザー・パッケージ
PL/SQL Toolkit
3.0
SYS パッケージ
4.0
ユーザー・スキーマ
oas_public
共通スキーマ
SYS スキーマ
Oracle Web Application Server 3.0 からアップグレードする場合は、各スキーマから Oracle
Web Application Server 3.0 のパッケージを削除する必要があります。Oracle Application
Server 4.0 のパッケージは、共通スキーマに自動的にインストールされます。
PL/SQL Web Toolkit のインストール
Oracle Application Server のインストール時に PL/SQL Web Toolkit をインストールしな
かった場合は、Oracle Application Server Manager を使用してインストールできます。
インストール・スクリプトにより、次のような作業が行われます。
■
oas_public のユーザー・アカウントを作成し、そのスキーマに PL/SQL Web Toolkit を
インストールします。
■
websys ユーザーを作成し、websys スキーマにコンテンツ・サービス・データベース・
オブジェクトと owa_content パッケージをインストールします。
1.
ブラウザを起動し、Oracle Application Server の「Welcome」ページを表示します。こ
のステップの詳細は、
『Oracle Application Server 管理者ガイド』を参照してください。
2. 「OAS ユーティリティ」をクリックして、
「ユーティリティ」ナビゲーション・ツリーを
表示します。
4-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL Web Toolkit のインストール
「インストール」の横の + をクリック
3. 「ユーティリティ」ナビゲーション・ツリーで、
します。
4. 「インストール」の下の「PL/SQL ツールキット」をクリックして、
「インストール」
フォーム(図 4-2)を表示します。
5. 「インストール」フォームで、PL/SQL Web Toolkit を入れる Oracle データベースの情
報を入力します。
■
ORACLE_SID : ローカルの Oracle データベース名(存在する場合)
。
■
「接続文字列」: データベースが別のマシンで稼動している場合、SQL*Net V2 の接
続文字列を入力します。
■
「DBA ユーザー名」と「パスワード」: PL/SQL Web Toolkit をインストールするス
クリプトを実行するために使用するログイン。
注意 : PL/SQL Web Toolkit をインストールするには、DBA ユーザーで
SYS を使用する必要があります。他のユーザー(SYSTEM ユーザーを含
む)でログインすると、sys.dbms_sys_sql プロシージャの実行権限を
oas_public に付与できないため、正常に動作しません。
■
「適用」をクリックします。
図 4-2 PL/SQL Web Toolkit の「インストール」フォーム
6.
ウィンドウに、インストールの進行状況が表示されます。インストールが完了したら、
ウィンドウの「OK」をクリックします。
PL/SQL Web Toolkit の使用
4-3
PL/SQL Web Toolkit のパッケージ
PL/SQL Web Toolkit のパッケージ
PL/SQL Web Toolkit には、次のパッケージが含まれています。
表 4-1 PL/SQL Web Toolkit のパッケージ
パッケージ
説明
htf および htp
htp(ハイパーテキスト・プロシージャ)パッケージには、HTML タグ
を生成するプロシージャが含まれています。たとえば、htp.anchor プロ
シージャは HTML のアンカー・タグ <A> を生成します。
htf(ハイパー・テキスト・ファンクション)パッケージには、htp
パッケージのプロシージャのファンクション・バージョンが入っていま
す。ファンクション・バージョンは、直接、Web ページに出力を生成し
ません。かわりに、出力を戻り値として実行元の PL/SQL 文に渡しま
す。コールをネストする必要がある場合、ファンクションを使用しま
す。
htf ファンクションの結果を出力するには、htp.print プロシージャから
それらのファンクションをコールします。これにより、生成された Web
ページにパラメータ値が出力されます。
owa
PL/SQL カートリッジが必要とするサブプログラムが含まれています。
owa_sec
カートリッジがリクエストを認証するために使用するサブプログラムが
含まれています。
owa_util
ユーティリティ・サブプログラムが含まれています。このパッケージの
内容は、次の領域に分かれています。
■
動的 SQL ユーティリティを使用すると、動的に生成される SQL
コードが入った HTML を生成できます。
■
HTML ユーティリティを使用すると、CGI 環境変数の値を取り出し
て、URL リダイレクトを実行できます。
■
日付ユーティリティを使用すると、日付の処理を修正できます。日
付の値は、HTML では単純な文字列として扱われますが、Oracle
データベースではデータ型として正しく取り扱う必要があります。
owa_pattern
正規表現の機能を使用した文字列のマッチングと操作に使用するサブプ
ログラムが含まれています。
owa_text
文字列を処理するために owa_pattern が使用するサブプログラムが含
まれています。これらは外部化されているため、直接使用できます。
owa_image
ユーザーがクリックしたイメージの位置を取得するサブプログラムが含
まれています。リンク先に PL/SQL カートリッジを実行するイメージ・
マップがある場合は、このパッケージを使用します。
4-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL Web Toolkit のパッケージ
表 4-1 PL/SQL Web Toolkit のパッケージ(続き)
のパッケージ(続き)
パッケージ
説明
owa_cookie
HTTP の Cookie の送信およびクライアントのブラウザからの取得を行
うサブプログラムが含まれています。Cookie は、HTTP コール間の状態
を管理するためにブラウザに送信される不透過の文字列です。このス
テータスは、クライアントのセッションが確立されている間のみ、また
は有効期限が指定されている場合は有効期限まで維持されます。システ
ム日付は、owa_custom パッケージに指定されている情報を参照して計
算されます。
owa_opt_lock
更新情報の消失を防ぐために、データベースに簡単なロック機構を付加
するサブプログラムが含まれています。ユーザーが行を選択して更新し
ようとしている間に別のユーザーがその値を変更した場合、更新情報が
消失する可能性があります。
owa_custom
authorize ファンクション(5-4 ページの「カスタム認証」を参照)と、
Cookie が使用するタイムゾーン定数が含まれています。
owa_content
コンテンツ・サービス・リポジトリを検索してドキュメントのプロパ
ティを処理できるサブプログラムが含まれています。このパッケージを
使用する場合、ユーザーはこのパッケージ上での実行権限が必要です。
この権限は、sys ユーザーで付与できます。
htp と htf
htp パッケージと htf パッケージには、ストアド・プロシージャから HTML タグを生成で
きるサブプログラムが含まれています。たとえば、次のコマンドを実行すると、簡単な
HTML ドキュメントが生成されます。
create or replace procedure
BEGIN
htp.htmlopen;
htp.headopen;
htp.title('Hello');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Hello');
htp.bodyclose;
htp.htmlclose;
END;
/
hello AS
---------
generates
generates
generates
generates
generates
generates
generates
generates
<HTML>
<HEAD>
<TITLE>Hello</TITLE>
</HEAD>
<BODY>
<H1>Hello</H1>
</BODY>
</HTML>
また、これらのパッケージには出力プロシージャ(htp.print など)が存在し、引数を現行ド
キュメントに書き出すことができます。これらの出力プロシージャを使用すると、標準以外
の HTML の生成やファンクションの戻り値を表示したり、あるいは HTML ドキュメントに
そのまま表示されるハードコードされたテキストを渡すことができます。生成されたテキス
トは PL/SQL カートリッジに渡され、その後、ユーザーのブラウザに送信されます。
PL/SQL Web Toolkit の使用
4-5
PL/SQL Web Toolkit のパッケージ
owa_image
owa_image パッケージには、ユーザーがイメージ上でクリックした位置の座標を取得する
サブプログラムが含まれています。このパッケージは、PL/SQL カートリッジを実行するイ
メージ・マップに使用します。プロシージャは次のようになります。
create or replace procedure process_image
(my_img in owa_image.point)
x integer := owa_image.get_x(my_img);
y integer := owa_image.get_y(my_img);
begin
/* process the coordinate */
end;
/
owa_opt_lock
owa_opt_lock パッケージには、更新情報の消失を防ぐために、データベースに簡単なロッ
ク機構を付加するサブプログラムが含まれています。ユーザーが行を選択して更新しようと
している間に別のユーザーがその値を変更した場合、更新情報が消失する可能性がありま
す。
HTTP は状態を保持しないプロトコルであるため、PL/SQL カートリッジは、従来型のデー
タベースのロック構造を使用できません。owa_opt_lock パッケージでは、次の 2 つの方法
でこの更新情報の消失の問題を回避できます。
■
隠しフィールドを使用する場合、HTML ページの隠しフィールドに以前の値を保管しま
す。ユーザーが更新を要求すると、カートリッジはデータベースの現在の状態と保管し
た値が一致するかどうかをチェックします。更新処理は、値が一致した場合にのみ実行
されます。この方法を使用するには、owa_opt_lock.store_values プロシージャを
コールします。
■
チェックサムを使用する場合、値そのものを保管するのではなく、チェックサムを保管
します。この方法を使用するには、owa_opt_lock.checksum ファンクションをコー
ルします。
これらの方法は、" 楽観的 " です。つまり、他のユーザーが更新できないようにするのでは
なく、更新の割込みが発生した場合に現行の更新を無効にします。
owa_custom
これは、Oracle Application Server 4.0 の新機能です。
owa_custom パッケージには、authorize ファンクション(5-4 ページの「カスタム認証」を
参照)と、Cookie が使用するタイムゾーン定数が含まれています。Cookie はグリニッジ標
準時(GMT)で定義された有効期限を使用します。GMT を使用していない場合は、この 2
つの定数のうちのいずれかを使用して自分用のタイムゾーンを設定できます。
4-6 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL Web Toolkit のパッケージ
■
ご使用のタイムゾーンを Oracle が認識する場合は、dbms_server_timezone を使用し
て直接指定できます。この値はタイムゾーンの省略形です。(認識されるタイムゾーン
のリストは、
『Oracle 8 Server SQL リファレンス』の「SQL 関数」を参照してくださ
い。
)たとえば、タイムゾーンが太平洋標準時の場合は、次のように使用します。
dbms_server_timezone constant varchar2(3) := 'PST'
■
Oracle が認識しないタイムゾーンを使用する場合は、dbms_server_gmtdiff を使用
して GMT との時間差を指定します。使用するタイムゾーンが GMT よりも進んでいる
場合は正の数、遅れている場合は負の数を指定します。
dbms_server_gmtdiff constant number := NULL
必要な変更を行った後に、パッケージをリロードする必要があります。
owa_content
owa_content パッケージには、コンテンツ・サービス・リポジトリを問い合わせ、ドキュ
メント・プロパティを操作するためのファンクションとプロシージャが含まれています。こ
のパッケージは、次のような作業に使用できます。
■
ドキュメントの記述を設定する。
■
ドキュメントを削除する。
■
ドキュメントの属性を削除する。
■
属性情報を取り出す。
■
ドキュメントの属性をリストする。
■
ドキュメントのコンテンツ・タイプを取り出す。
owa_content パッケージを使用する PL/SQL プロシージャとパッケージをコンパイルする
場合、次のエラー・メッセージが表示される場合があります。
PLS-00201
identifier 'WEBSYS.OWA_CONTENT' must be declared
このエラーが発生しないようにするには、非ローカル・データベースを使用する新規 DAD
の作成時に DBA ユーザーに対してプロンプトが表示されたときに、SYS ユーザー名と対応
するパスワードを入力する必要があります。SYSTEM ユーザーを入力すると、データベー
ス・ユーザーに対して正しい権限を付与できなくなります。DBA ユーザーとして SYSTEM
を入力した場合は、次のように権限付与オプションを明示的に実行する必要があります。
SQL> grant all on WEBSYS.OWA_CONTENT to scott
既存のデータベース・ユーザーを使用して DAD を作成した場合、OWA_CONTENT パッ
ケージの使用前に、前述の権限付与操作を手動で実行する必要があります。
PL/SQL Web Toolkit の使用
4-7
PL/SQL Web Toolkit のパラメータ名の表記規則
PL/SQL サンプルでは、OWA_CONTENT パッケージを使用するため、これらのステップ
は、PL/SQL サンプルをインストールする前に実行する必要があります。
PL/SQL Web Toolkit のパラメータ名の表記規則
PL/SQL Web Toolkit では、パラメータの最初の文字がパラメータのデータ型を示します。
表 4-2 PL/SQL Web Toolkit のパラメータ名
最初の文字
データ型
例
c
VARCHAR2
cname IN VARCHAR2
n
INTEGER
nsize IN INTEGER
d
DATE
dbuf IN DATE
HTML タグの属性
多くの HTML タグに多くのオプションの属性が存在するため、これらが個々のパラメータ
としてハイパーテキスト・プロシージャまたはファンクションに渡されると、コールの扱い
が難しくなります。また、標準以外の属性をサポートしているブラウザもあります。そのた
め、HTML タグを生成する各ハイパーテキスト・プロシージャまたはファンクションには、
一番最後のパラメータとしてオプションの cattributes が存在します。このパラメータを使用
すると、必要な HTML 属性のテキストをそのまま PL/SQL プロシージャに渡すことが可能
です。
たとえば、htp.em の構文は次のとおりです。
htp.em(ctext, cattributes);
HTML3.0 の属性を使用したコールの例は、次のとおりです。
htp.em('This is an example','ID="SGML_ID" LANG="en"');
これにより、次の結果が生成されます。
<EM ID="SGML_ID" LANG="en">This is an example</EM>
PL/SQL カートリッジとアプレット
HTML ファイルで APPLET タグを使用してアプレットを参照する場合、サーバーはその
HTML ファイルの入っているディレクトリで、そのアプレットのクラス・ファイルを探しま
す。そのアプレットのクラス・ファイルが別のディレクトリに存在する場合は、APPLET タ
グの CODEBASE 属性を使用してそのディレクトリを指定します。
PL/SQL カートリッジから HTML ページを生成し、その HTML ページがアプレットを参照
する場合は、CODEBASE 属性を指定する必要があります。これは、カートリッジには現行
4-8 Oracle Application Server PL/SQL アプリケーション開発者ガイド
LONG データ型
ディレクトリという概念がなく、アプレットのクラス・ファイルの検索場所がわからないた
めです。
次の例では、htp.appletopen を使用して APPLET タグを生成しています。この例では、
CODEBASE の値を指定するために cattributes パラメータを使用します。
htp.appletopen('myapplet.class', 100, 200, 'CODEBASE="/applets"')
これにより、次のタグが生成されます。
<APPLET CODE="myapplet.class" height=100 width=200 CODEBASE="/applets">
/applets は、myapplet.class ファイルが存在する仮想パスを示します。
セッションと Cookie
Web Request Broker はセッションを使用して、複数のリクエスト間でカートリッジ内の永続
的な状態を維持します。クライアントのブラウザを永続的な状態に維持するために Cookie
を使用します。Cookie に関する情報は次を参照してください。
■
http://home.netscape.com/newsref/std/cookie_spec.html
■
http://www.virtual.net/Projects/Cookies/
owa_cookie パッケージを使用すると、HTTP ヘッダーの Cookie を送信および取得できるよ
うになります。Cookie の値の設定と取得に使用するサブプログラムが含まれています。
■
owa_cookie.cookie データ型には、Cookie の名前と値のペアが含まれます。
■
owa_cookie.get ファンクションは、指定された Cookie の値を取得します。
■
owa_cookie.get_all プロシージャは、Cookie の名前と値のペアをすべて取得しま
す。
■
owa_cookie.remove プロシージャは、指定された Cookie を削除します。
■
owa_cookie.send プロシージャは、HTTP ヘッダーに "Set-Cookie" 行を生成します。
注意 : HTTP ヘッダーは、すべて英語でなければなりません。ヘッダー
をデータベースから生成する場合は、英語で作成されていることを確認し
てください。
LONG データ型
htp.print、htp.prn、htp.prints、htp.ps または owa_util.cellsprint などのプ
ロシージャやファンクションで LONG データ型の値を使用する場合、LONG データの最初
の 64KB のみ使用される点に注意してください。このような制約は、プロシージャやファン
クションで LONG データが varchar2 データ型にバインドされているために発生しています。
PL/SQL Web Toolkit の使用
4-9
Inter-Cartridge Exchange(ICX)
Inter-Cartridge Exchange(
Exchange(ICX)
ICX)
Oracle データベースのバージョン 7.3.3 以降を実行している場合、ICX を使用してプロシー
ジャの中から他のカートリッジをコールすることが可能です。ICX を使用すると、カート
リッジは HTTP リクエストを作成することによって他のカートリッジと通信できるようにな
ります。コールを行ったカートリッジ(この場合はプロシージャ)は、ICX コールからのレ
スポンスを受信すると処理を継続できます。
ストアド・プロシージャからカートリッジをコールするには、utl_http パッケージを使用し
ます。このパッケージの詳細は、Oracle データベースのドキュメントを参照してください。
リリース 7.3.3 では、この情報は "readme" ファイルに入っています。リリース 8.x では、こ
の情報は『アプリケーション開発者ガイド』に入っています。
htp パッケージと htf パッケージの拡張
htp パッケージと htf パッケージでは、カスタムの拡張機能を使用できます。このため、
HTML の標準の変更に合わせて、ハイパー・テキスト・プロシージャおよびファンクション
のパッケージに似た新機能を追加して、変更を反映することが可能です。
次に、標準以外の <BLINK> タグと架空の <SHOUT> タグを使用してカスタマイズされた
パッケージの例を示します。
create package nsf as
function blink(cbuf in varchar2) return varchar2;
function shout(cbuf in varchar2) return varchar2;
end;
/
create package body nsf as
function blink(cbuf in varchar2) return varchar2 is
begin return ('<BLINK>' || cbuf || '</BLINK>');
end;
function shout(cbuf in varchar2) return varchar2 is
begin return ('<SHOUT>' || cbuf || '</SHOUT>');
end;
end;
/
create package nsp as
procedure blink(cbufin varchar2);
procedure shout(cbufin varchar2);
end;
/
create package body nsp as
procedure blink(cbufin varchar2) is
begin htp.print(nsf.blink(cbufin));
end;
procedure shout(cbufin varchar2) is
begin htp.print(nsf.shout(cbufin));
4-10 Oracle Application Server PL/SQL アプリケーション開発者ガイド
ファイルのアップロードおよびダウンロード
end;
end;
/
これにより、上のプロシージャとファンクションを自分のプロシージャの中で使用できるよ
うになりました。
create procedure nonstandard as
begin
nsp.blink('Gee this hurts my eyes!');
htp.print('And I might ' || nsf.shout('get mad!'));
end;
/
ファイルのアップロードおよびダウンロード
PL/SQL カートリッジを使用して、ファイルをクライアントのマシンからデータベースに転
送(アップロード)したり、その逆(ダウンロード)を行うことができます。テキストおよ
びバイナリ・ファイルのアップロードとダウンロードが可能です。PL/SQL カートリッジの
ファイルのアップロード / ダウンロード機能は、Oracle Application Server のコンテンツ・
サービスをベースにしています。
また、アップロードしたファイルの属性(ファイル名、最終変更日、コンテンツ・タイプ、
所有者など)は、データベースに格納されます。属性の問合せを行って、検索基準に一致す
るファイルのみを表示できます。
ファイルは非圧縮フォーマット、または gzip と互換性がある圧縮フォーマットでデータ
ベースに保管できます。
注意 : Oracle Application Server に付属の Oracle Web Listener を使用し
ている場合、転送できるバイト数には 8MB の上限があります。
アップロード
クライアント・マシンからデータベースにファイルをアップロードする場合は、次に示す内
容を含んだ HTML ページを作成します。
■
enctype 属性に "multipart/form-data" が設定され、action 属性が PL/SQL カート
リッジのファンクション・コールに関連付けられている FORM タグ。
■
type 属性と name 属性に file が設定された INPUT エレメント。"INPUT type=file"
エレメントを使用すると、ユーザーはファイル・システムからファイルの一覧を表示し
て、そこからファイルを選択できます。
ユーザーが「Submit Query」ボタンをクリックしてフォーム・アクションをトリガーする
と、次のイベントが発生します。
PL/SQL Web Toolkit の使用
4-11
ファイルのアップロードおよびダウンロード
1.
ブラウザは、ユーザーが指定したファイルの内容とその他のフォーム・データをサー
バーにアップロードします。
2.
PL/SQL カートリッジは、ファイルの内容をデータベースに保管します。
3.
action 属性で指定したストアド・プロシージャが、ファイルのアップロードを行わず
に PL/SQL カートリッジを実行する場合と同じように実行されます。相違点は、その他
のフォーム・データとともにファイル名も引数としてプロシージャに渡される点です。
PL/SQL カートリッジに関連付けられている DAD は、コンテンツ・サービスの使用が
可能になっている必要があります。つまり、DAD に関連付けられるユーザー名にデー
タベースの ows_standard_role ロールが付与されている必要があります。DAD がユー
ザー名に関連付けられていない場合は、ユーザーが入力するユーザー名にそのロールが
存在することが前提です。このロールを使用すると、ユーザーはファイルの内容をコン
テンツ・サービスの表に書き込むことができます。それ以外の場合はエラーが発生しま
す。
次の例は、アップロードするファイルをユーザーがファイル・システムから選択できる
HTML フォームを示しています。このフォームには、ファイルに関する情報を入力するその
他のフィールドも含まれています。
図 4-3 アップロード・フォーム
この HTML ページの内容は次のとおりです。
<html>
<head>
<title>test upload</title>
</head>
4-12 Oracle Application Server PL/SQL アプリケーション開発者ガイド
ファイルのアップロードおよびダウンロード
<body>
<p>start form
<FORM
enctype="multipart/form-data"
action="/sample/plsql/write_info"
method="POST">
<p>Who:
<INPUT type="text" name="who">
<p>Description:
<INPUT type="text" name="description"><br>
<p>File to upload:
<INPUT type="file" name="myfile"><br>
<p>
<INPUT type="submit">
</FORM>
</body>
</html>
ユーザーが「Submit Query」ボタンをクリックすると、ブラウザは "INPUT type=file"
エレメントにリストされたファイルをアップロードします。次にプロシージャ write_info
が実行されます。このプロシージャは、フォームのフィールドの情報をデータベースの表に
書き込み、ユーザーにページを返します。そのプロシージャは次のとおりです。
create procedure write_info (
who
in varchar2,
description in varchar2,
myfile
in varchar2) as
begin
insert into myTable values (who, description, myfile);
htp.htmlopen;
htp.headopen;
htp.title('File Uploaded');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Upload Status');
htp.print('Uploaded ' || myfile || ' successfully');
htp.bodyclose;
htp.htmlclose;
end;
/
PL/SQL Web Toolkit の使用
4-13
ファイルのアップロードおよびダウンロード
このプロシージャは、ユーザーにレスポンスを返す必要はありません。ただし、アップロー
ド処理が成功したか失敗したかをユーザーに知らせるようにすることをお薦めします。
このストアド・プロシージャには、"myfile" という名前の入力パラメータが必要です。この
パラメータは、ファイルをアップロードする際に必須のフォーム・エレメントであるためで
す。そのデータ型には、varchar2 または owa.vc_arr のいずれかを使用します。ユー
ザーが送信アクションごとに 1 つのファイルをアップロードできるようにする場合、
varchar2 を使用し、送信ごとに複数のファイルをアップロードできるようにする場合、
owa.vc_arr を使用します。複数ファイルをアップロードするには、複数の "INPUT
type=file name=myfile" エレメントを指定する必要があります。
アップロードされたファイルを圧縮フォーマットで保管するには、Oracle Application
Server Manager の「PL/SQL パラメータ」フォームを使用して、カートリッジがそのように
動作するように設定します。wrb.app ファイルでは、owa_compress_files パラメータに
相当します。このパラメータは、デフォルトでは FALSE に設定されます。
注意 : ファイルのフルパス名の長さには、426 文字までという制限があり
ます。この例では、フルパス名を myfile 変数に格納しています。
ダウンロード
データベースにファイルをアップロードすると、ファイルのダウンロード、データベースか
らの削除および属性の読込みと書込みが可能になります。
ファイルをデータベースからユーザーのマシンにダウンロードするには、
htp.download_file プロシージャを使用します。このプロシージャには 2 つのバリエー
ションがあります。
htp.download_file(sFileName in varchar2)
htp.download_file(sFileName in varchar2, bCompress in boolean)
最初のパラメータでダウンロードするファイルを指定し、2 番目のパラメータでダウンロー
ドの前にファイルを圧縮するかどうかを指定します。
ファイルをデータベースからダウンロードした後、ダウンロードしたファイルとその圧縮状
態のリストを表示するには、次のようにします。
htp.get_download_files_list(sFileName out varchar2)
htp.get_download_files_list(bCompress out binary_integer);
次に、ユーザーがファイルをダウンロードできる HTML フォームの例を示します。この
フォームには、ダウンロード可能なファイルのリストと「Download」ボタンが表示されま
す。
4-14 Oracle Application Server PL/SQL アプリケーション開発者ガイド
ファイルのアップロードおよびダウンロード
図 4-4 ダウンロード・フォーム
このページの HTML は次のとおりです。
<HTML>
<head>
<title>test download</title>
</head>
<body bgcolor="white">
<h2>Download Files</h2>
<FORM action="/sample/plsql/download" method="POST">
<p>Select file to download
<p>
<SELECT name="filex" size=5>
<option value="file1">file1</option>
<option value="file2">file2</option>
<option value="file3">file3</option>
<option value="file4">file4</option>
<option value="file5">file5</option>
<option value="file6">file6</option>
<option value="file7">file7</option>
<option value="file8">file8</option>
</select>
PL/SQL Web Toolkit の使用
4-15
文字列のマッチングと操作
<p>
<INPUT type="submit" value="Download">
</FORM>
</body>
</HTML>
「Download」ボタンに関連付けられているアクションにより、選択したファイルをダウン
ロードする download というストアド・プロシージャが実行されます。
download プロシージャのコードは次のとおりです。
create procedure download (filex in varchar2) as
begin
htp.download_file(filex);
end;
/
ユーザーが「Download」ボタンをクリックすると、ダウンロードしたファイルを保存する
ためのファイル名を入力するプロンプトがブラウザから表示されます。ファイルをダウン
ロードするプロシージャについては、次の点に注意してください。
■
HTP パッケージのプロシージャなど、HTML を生成するプロシージャのコールは無視さ
れます。そのコールで問合せとストアド・プロシージャの実行は可能ですが、ブラウザ
に返す文字列を書き出すことはできません。そのコールではファイルの内容のみ返すこ
とが可能です。
■
ストアド・プロシージャは、htp.download_file を 1 回だけコールできます。複数の
ファイルのダウンロードはできません。
■
ダウンロードしたファイルが圧縮されている場合は、gunzip を使用して解凍します。
データベース・ファイルのリポジトリを操作するユーティリティの詳細は、
『Oracle
Application Server PL/SQL Web Toolkit リファレンス』の第 2 章、「owa_content パッケー
ジ」を参照してください。
文字列のマッチングと操作
owa_pattern パッケージには、正規表現の機能を使用した文字列のマッチングや処理に使用
するプロシージャおよびファンクションが入っています。このパッケージには、次のサブプ
ログラムがあります。
■
owa_pattern.match ファンクションは、文字列中に正規表現が存在するかどうかを判
断します。TRUE または FALSE が返されます。
■
owa_pattern.amatch ファンクションは、owa_pattern.match ファンクションの、
さらに高度なバリエーションです。これにより文字列内の一致の位置を指定できます。
4-16 Oracle Application Server PL/SQL アプリケーション開発者ガイド
文字列のマッチングと操作
このファンクションは正規表現が見つかった場合にその文字列の終了位置を返します。
正規表現が見つからなかった場合は、0 を返します。
■
owa_pattern.change ファンクションおよびプロシージャは、一致した正規表現の文
字列の部分を新しい文字列に置き換えます。ファンクションとしてコールした場合は、
正規表現が見つかって置換された回数を返します。
これらのサブプログラムはオーバーロードされます。つまり、各サブプログラムには複数の
バージョンがあり、使用するパラメータにより区別されています。具体的には、MATCH に
は 6 つ、AMATCH と CHANGE にはそれぞれ 4 つのバージョンがあります。サブプログラ
ムでは、次のパラメータを使用します。
■
line: 一致の調査対象となるターゲット。名前に反して、2 行以上のテキストまたは
owa_text.multi_line データ型の場合があります。
■
pat: サブプログラムが line 中に設定するパターン。このパターンには正規表現を使用で
きます。owa_pattern.change ファンクションおよびプロシージャでは、このパラ
メータは from_str という名前になっているため注意してください。
■
flags: 検索で大文字・小文字を区別するか、またはグローバル置換を行うかどうかを指
定。
owa_pattern.match
このファンクションの正規表現は、VARCHAR2 または owa_pattern.pattern データ型の
いずれかになります。owa_pattern.getpat プロシージャを使用して、文字列から
owa_pattern.pattern データ型を作成できます。
owa_text.stream2multi プロシージャを使用して、長い文字列から multi_line データ型
を作成できます。multi_line を使用する場合、rlist パラメータによって見つかった一致部分
のリストを指定します。
line が multi_line でなく文字列の場合、backrefs という名前のオプションの出力パラメータ
を追加できます。このパラメータは、正規表現中の一連のトークンに一致したターゲットの
各文字列を保管する row_list を指定します。owa_pattern.match ファンクションの例を
次に示します。
boolean foundMatch;
foundMatch := owa_pattern.match('KAZOO', 'zoo.*', 'i');
このファンクションの意味:KAZOO は正規表現 "zoo.*" の検索ターゲットです。ピリオド
は改行以外のすべての文字を表し、アスタリスクはその前にある文字の 0 回以上の繰返しと
一致します。この場合、このアスタリスクは改行以外のすべての文字と一致します。
つまり、この正規表現は一致するターゲットに "zoo" が含まれ、"zoo" は改行で終了しない、
または改行を含んでいない(改行はピリオドとは一致しない)任意の文字セットで構成され
ることを示します。i は、この検索で大文字・小文字の区別をしないことを示すフラグです。
この場合、このファンクションは TRUE を返し、一致が見つかったことを示します。
PL/SQL Web Toolkit の使用
4-17
文字列のマッチングと操作
owa_pattern.change
owa_pattern.change は、実行方法によってプロシージャにもファンクションにもなります。
ファンクションとして使用すると、変更回数が返されます。フラグ 'g' を使用しない場合は、
この番号は 0 または 1 のみになります。フラグ 'g' は、一致したものがすべて正規表現で置
き換えられることを示します。これ以外の場合は、最初に一致したもののみ置換されます。
置換文字列には、正規表現に一致したターゲットの部分が置換式に入ることを示すトークン
のアンパサンド(&)を使用できます。たとえば、次のようになります。
owa_pattern.change('Cats in pajamas', 'C.+in', '& red ')
この正規表現は、文字列 'Cats in' にマッチします。次に、この文字列は '& red' に置換され
ます。アンパサンド文字 & は、正規表現によって一致した 'Cats in' を示します。このよう
に、このプロシージャは、文字列 'Cats in pajamas' を 'Cats in red' に置き換えます。これを
プロシージャではなくファンクションとしてコールすると、返される値は 'Cats in red' では
なく 1 になり、置換が 1 回行われたことを示します。
4-18 Oracle Application Server PL/SQL アプリケーション開発者ガイド
5
認証とセキュリティ
Oracle Application Server が提供する認証メカニズムに加えて、PL/SQL カートリッジには
さらに 2 つのレベルの認証メカニズムが用意されています。Oracle Application Server がド
キュメント、仮想パスおよび WRB から生成されたコンテンツを保護する一方、PL/SQL
カートリッジは、ユーザーのデータベースへのログインまたは PL/SQL の Web アプリケー
ションそのものを保護します。
詳細は、Oracle Application Server の開発者用のサイト(http://technet.oracle.com)のセ
キュリティに関する技術文書を参照してください。この文書には安全性の高い PL/SQL Web
アプリケーションの開発方法が説明されています。
内容
■
動的なユーザー名 / パスワード認証
■
動的ユーザー名 / パスワードおよび Basic_Oracle 方式
■
PL/SQL カートリッジおよび認証サーバー方式
■
カスタム認証
動的なユーザー名 / パスワード認証
この方式を使用すると、アクセスはデータベース本体で制御されます。この方式は、アプリ
ケーションでアクセスを制御しない場合に適しています。
「Database Access Descriptor(DAD)」フォームに、有効なユーザー名とパスワードのパラ
メータ値を入力しますが、
「ユーザー名とパスワードを DAD に保管する」チェック・ボック
スはチェックしないでください。これにより、ユーザーは、PL/SQL カートリッジと DAD
の同じ組合せを使用して、異なるスキーマ(データベース・アカウント)にログインできる
ようになります。ユーザーに、ブラウザでユーザー名とパスワードを入力するダイアログ・
ボックスが表示されます。このプロンプトは認証コールバックの実行中に表示され、ユー
ザーが入力した情報は指定されたユーザー名 / パスワードが属するデータベース・スキーマ
へのログインに使用されます。
認証とセキュリティ
5-1
動的ユーザー名 / パスワードおよび Basic_Oracle 方式
この方式は、複数ユーザーに複数の PL/SQL カートリッジと DAD(Oracle WebServer 2.0
では DCD)の組合せを作成する必要があるという問題を改善し、開発者は別のスキーマ
(指定されたユーザー名とパスワードに対応するスキーマ)のデータにアクセスするアプリ
ケーションを作成できます。
これは、自分のデータベース・アカウントを持つ複数のユーザーが、Web アプリケーション
を通じて双方向通信をするアプリケーションに適しています。たとえば、企業内で 100 人の
従業員が使用しているインターネット・アプリケーションの場合、WebServer 2.0 では 100
個のユーザー名とパスワードを使用する 100 個の DCD を作成する必要がありましたが、
Oracle Web Application Server 3.0 以降では、ユーザー名とパスワードを持たない PL/SQL
カートリッジと DAD の組合せを 1 つ作成するだけでよくなりました。
動的ユーザー名 / パスワードおよび Basic_Oracle 方式
Basic_Oracle 方式は、Oracle データベースでユーザーを検証できるセキュリティ方式です。
詳細は、
『Oracle Application Server セキュリティ・ガイド』を参照してください。
通常は、動的なユーザー名 / パスワードを使用しない HTML ページの場合にのみ、
Basic_Oracle 方式を使用します。つまり、カートリッジに対応する DAD にユーザー名 / パ
スワードが含まれている場合、PL/SQL カートリッジで Basic_Oracle 方式を使用することが
可能です。その理由は、どちらの方式もデータベースを使用してユーザーを認証し、競合が
生じる可能性があるからです。
動的なユーザー名 / パスワードのみでなく Basic_Oracle 方式を使用する理由の 1 つは、デー
タベース・ロールに基づいたユーザーの検証を要する場合があるためです。Basic_Oracle 方
式では、ロールに基づいてユーザーを認証できます。
このためには、必ず Basic_Oracle 方式のユーザー名 / パスワードの組合せが PL/SQL カー
トリッジ接続に使用されるようにし、この方式を必要とするすべてのアプリケーション・
コードがスキーマに存在するようにしてください。
セキュリティ方式で PL/SQL カートリッジの仮想パスを指定する方法については、次の項を
参照してください。PL/SQL では大文字・小文字の区別がないのに対して、仮想パスではこ
の区別があるため、この情報は重要です。
PL/SQL カートリッジおよび認証サーバー方式
認証サーバー方式(基本、ダイジェスト、IP ベースの制限またはドメイン・ベースの制限な
ど)を使用して、PL/SQL カートリッジを実行する仮想パスを保護できます。基本方式とダ
イジェスト方式では、ユーザーがユーザー名とパスワードを入力する必要があります。一
方、IP とドメイン方式では、ユーザーの IP アドレスおよびドメイン名に基づいて、ユー
ザーを許可したり制限できます。
仮想パスを方式に関連付けるには、Oracle Application Server Manager の各カートリッジの
「仮想パス」ページを使用します。(Oracle Application Server Manager の「Web セキュリ
ティ」ページを使用して、ユーザー名、グループ名およびレルムを方式に追加します。
)
5-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL カートリッジおよび認証サーバー方式
仮想パスには大文字・小文字の区別があり、PL/SQL プロシージャ名には大文字・小文字の
区別がないため、方式を PL/SQL カートリッジの仮想パスに関連付ける際に次のようなガイ
ドラインに従えば、セキュリティ・リスクはありません。
■
仮想パスに関連付けられたストアド・プロシージャを、すべて保護します。仮想パスの
ストアド・プロシージャ・コンポーネント内で "*" ワイルドカード文字を付けることに
よって仮想パスのストアド・プロシージャの一部を保護するだけでは不十分です。
たとえば、PL/SQL カートリッジが仮想パス /myApp/hr に関連付けられている場合、
保護する仮想パスに /myApp/hr/* と指定することによって、すべてのストアド・プロ
シージャを保護する必要があります。"salary" で開始するプロシージャのみ保護する
/myApp/hr/salary* などは指定しないでください。この場合、誰かが仮想パスに
/myApp/hr/SALARY_USA と入力すると、"SALARY" は、大文字・小文字の区別の点
で "salary" とは一致しないため、仮想パスに関連付けられた認証方式をバイパスしてし
まう可能性があります。
仮想パスのストアド・プロシージャ名の部分まで(ストアド・プロシージャ名は含まな
い)は大文字・小文字が区別されますが、プロシージャ名は大文字・小文字が区別され
ません。これにより、ユーザーが /MYAPP/HR/SALARY_USA と入力しても、Oracle
Application Server のディスパッチャ・コンポーネントが /MYAPP/HR と /myApp/hr
を一致させないため、プロシージャ SALARY_USA が実行されるのを防ぐことができま
す。
図 5-1 仮想パスを保護する場合の大文字・小文字の区別の説明
仮想パス /myApp/hr/salary_usa
■
PL/SQL カートリッジに
関連付けられたパス
PL/SQL プロシージャ名
大文字・小文字を区別
大文字・小文字の区別なし
仮想パスで一部のプロシージャのみ保護する必要がある場合は、PER_PACKAGE オプ
ションを付けてカスタム認証を使用します。カスタム認証の詳細は、次の項を参照して
ください。
認証とセキュリティ
5-3
カスタム認証
カスタム認証
カスタム認証は、アプリケーション自身(つまり、そのアプリケーション内で)のアクセス
をコントロールするアプリケーションに適しています。アプリケーションはデータベース・
レベルではなく、アプリケーション・レベルでユーザーの認証を行います。
カスタム認証には設定ファイルに保管される静的なユーザー名 / パスワードが必要で、動的
なユーザー名 / パスワード認証と組み合せて使用することはできません。
PL/SQL カートリッジは、DAD に設定されているユーザー名とパスワードを使用してデー
タベースにログインします。いったんログインすると、認証制御がアプリケーションに渡さ
れ、アプリケーション・レベルの PL/SQL フック(コールバック・ファンクション)がコー
ルされます。このコールバック・ファンクションのインプリメントは、アプリケーション開
発者が行います。コールバック関数の戻り値によって、認証が成功したかまたは失敗したか
を判断します。TRUE が返された場合は、認証が正常に行われたことを示します。戻り値が
FALSE の場合、認証は失敗し、アプリケーション内のコードは実行されません。
authorize ファンクションの構文は次のとおりです。
function authorize return boolean;
カスタム認証を使用可能にするには、次の 3 つのステップを実行する必要があります。
1.
privcust.sql ファイルを編集して認証レベルを設定します。
2.
アプリケーションをリロードします。
3.
認証ファンクションをインプリメントします。
カスタム認証は使用可能でもコールバック関数が定義されていない場合は、wrb.log ファイ
ルにエラーが出力されます。リリース 3.0 では、privinit.sql ファイルに認証レベルが設定さ
れましたが、リリース 4.0 ではこのファイルは存在しません。
認証ファンクションをいつ実行するかにより、そのファンクションを異なる場所に配置でき
ます。
■
すべてのユーザーおよびすべてのプロシージャに同じ認証ファンクションを実行する場
合は、privcust.sql ファイルの行を次のように変更します。
owa_sec.set_authorization(OWA_SEC.GLOBAL)
その後、PL/SQL Web Toolkit が入っている "oas_public" スキーマに、
owa_custom.authorize ファンクションをインプリメントします。
■
各ユーザーおよびすべてのプロシージャごとに異なる認証ファンクションを実行する場
合、privcust.sql ファイルの行を次のように変更します。
owa_sec.set_authorization(OWA_SEC.CUSTOM)
その後、各ユーザーのスキーマに owa_custom.authorize ファンクションをインプリメ
ントします。自分のスキーマにファンクションが存在しないユーザーの場合、
5-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
カスタム認証
"oas_public" スキーマの owa_custom.authorize ファンクションがかわりに実行されま
す。
Oracle Web Application Server 3.0 のユーザーの場合 : 各ユーザーのスキーマに
owa_init.authorize がインプリメントされている場合、そのファンクションを各ユー
ザーの owa_custom パッケージに移行する必要があります。
■
認証ファンクションをすべてのユーザーに対して、ただし特定のパッケージのプロシー
ジャにのみまたは無名プロシージャにのみ実行する場合は、privcust.sql ファイルの行
を次のように変更します。
owa_sec.set_authorization(OWA_SEC.PER_PACKAGE)
その後、各ユーザーのスキーマ内のそのパッケージに authorize ファンクションをイン
プリメントします。プロシージャがパッケージ内に存在しない場合、無名の authorize
ファンクションがかわりにコールされます。表 5-1 に、パラメータの値のサマリーを示
します。
表 5-1 カスタム認証
パラメータの値
アクセス制御の有効範囲
コールバック・ファンクション
OWA_SEC.NO_CHECK
n/a
n/a
OWA_SEC.GLOBAL
すべてのパッケージ
"oas_public" スキーマ内の
owa_custom.authorize
OWA_SEC.PER_PACKAGE
指定したパッケージ
ユーザーのスキーマ内の
packageName.authorize
OWA_SEC.PER_PACKAGE
無名プロシージャ
ユーザーのスキーマ内の authorize
OWA_SEC.CUSTOM
すべてのパッケージ
ユーザーのスキーマ内の
owa_custom.authorize、またはその
スキーマに存在しない場合は
"oas_public" スキーマ内の
owa_custom.authorize
カスタム認証を使用する場合は、owa_sec パッケージのサブプログラムを使用できます。カ
スタム認証を使用しない場合は、owa_sec を使用しないでください。
認証とセキュリティ
5-5
カスタム認証
OWA_SEC.GLOBAL
これは、Oracle Application Server 4.0 の新機能です。
PL/SQL カートリッジが実行されるたびに、"oas_public" スキーマ内の
owa_custom.authorize ファンクションがコールされます。
たとえば、次の authorize ファンクションは、ユーザーが "guest" でログインし、パスワー
ドに "welcome" を指定し、クライアントの最初と 2 番目の IP アドレスが 144 と 25 であるこ
とを検証します。
create or replace package body owa_custom is
-- Global authorize callback function
-- It is used when the authorization scheme is set to OWA_SEC.GLOBAL
function authorize return boolean is
ip_address
owa_util.ip_address;
begin
-- prompt the user for login and password
owa_sec.set_protection_realm('vendors');
ip_address := owa_sec.get_client_ip;
if ((owa_sec.get_user_id = 'guest') and
(owa_sec.get_password = 'welcome') and
(ip_address(1) = 144) and (ip_address(2) = 25)) then
return TRUE;
else
return FALSE;
end if;
end;
begin -- OWA_CUSTOM
owa_sec.set_authorization(OWA_SEC.GLOBAL);
end;
OWA_SEC.PER_PACKAGE
リクエストがパッケージ内のプロシージャを指定すると、そのパッケージ内の authorize
ファンクションが実行されます。プロシージャがパッケージ内に存在しない場合、無名の
authorize ファンクションがコールされます。
たとえば、ユーザーが foo.print_page というプロシージャを実行すると、ユーザー認証を行
うために foo.authorize ファンクションがコールされます。
create or replace package foo is
procedure print_page;
function authorize return boolean;
end;
5-6 Oracle Application Server PL/SQL アプリケーション開発者ガイド
カスタム認証
create or replace package body foo is
procedure print_page is
begin
htp.print('Hello World');
end;
function authorize return boolean is
begin
owa_sec.set_protection_realm('vendors');
if ((owa_sec.get_user_id = 'guest') and
(owa_sec.get_password = 'welcome') then
return TRUE;
else
return FALSE;
end if;
end; -- authorize function
end; -- package body foo
create or replace package body owa_custom is
-- The authorize function in the owa_custom package will not
-- be invoked if the authorization level is set at OWA_SEC.PER_PACKAGE.
begin -- OWA_CUSTOM
owa_sec.set_authorization(OWA_SEC.PER_PACKAGE);
end;
OWA_SEC.CUSTOM
PL/SQL カートリッジが実行されるたびに、ユーザーのスキーマ内の
owa_custom.authorize ファンクションがコールされます。これにより、各ユーザーごとに
異なる認証ファンクションをインプリメントできます。ユーザーのスキーマに
owa_custom.authorize ファンクションが存在しない場合、PL/SQL カートリッジは
"oas_public" スキーマ内でそのファンクションを探します。
認証とセキュリティ
5-7
カスタム認証
5-8 Oracle Application Server PL/SQL アプリケーション開発者ガイド
6
トランザクション
Oracle Web Application Server 3.0 より前のバージョンでは、URI リクエストによって実行
された 1 つまたは一連のプロシージャは、PL/SQL コードのシーケンスで実行された変更や
トランザクションをすべてコミットしていました。状況によってはこれでは困ることがあり
ます。たとえば、エレクトロニック・コマース・アプリケーションでは、変更または新しい
リクエストを実行するたびにコミットせずに、ユーザーがショッピング・バスケットにアイ
テムを自由に出し入れできることが理想的です。まだコミットしていない新しい値の行を使
用して表の表示を更新し、ユーザーがトランザクションをコミットまたは中止できるように
することが望まれます。
Oracle Web Application Server 3.0 と Oracle Application Server 4.0 では、それが可能です。
このバージョンの PL/SQL カートリッジでは、複数の HTTP リクエストにまたがるトラン
ザクションの実行が可能なトランザクション・サービスをサポートします。トランザクショ
ン・サービスは X/Open Company が定義する XA モデル・トランザクションに基づいてい
ます。PL/SQL カートリッジはトランザクション・モデル・クライアントとして動作し、
データベースはリソース・マネージャとして使用されます。
『Oracle Application Server 管理者ガイド』の第 11 章「トランザクションを使用可能にする」
で、トランザクションに関するバックグラウンド情報と設定情報について説明しています。
この章を読む前に、必ず『Oracle Application Server 管理者ガイド』の第 11 章を読んでくだ
さい。
内容
■
トランザクション・サービスのメカニズム
■
例
トランザクション
6-1
トランザクション・サービスのメカニズム
トランザクション・サービスのメカニズム
トランザクション・サービスを使用して、URI をトランザクションの操作(開始、コミット
およびロールバック)に関連付けます。ユーザーがこれらの URI の 1 つを実行すると、トラ
ンザクション・サービスは対応するトランザクション操作を実行します。
これらの URI は、ストアド・プロシージャまたはユーザーに該当するページを表示する
PL/SQL ソース・ファイルのいずれかにマップできます。たとえば、トランザクション開始
の URI は、ユーザーがショッピング・カートに追加できるアイテムのリストを表示し、コ
ミット・トランザクション URI は、購入済みのアイテムのリストをユーザーに表示し、ロー
ルバック・トランザクション URI は、現在のショッピング・カートを終了して別のカートを
使用するかどうかをユーザーに確認するページを表示します。
開始 URI とコミットまたはロールバック URI の間に、ユーザーは、プロシージャをコール
する他の URI を実行して、データベース上でアクションを実行します。これらのプロシー
ジャはトランザクションに属していることもあり、属していないこともあります。URI がト
ランザクションに属している場合、そのプロシージャが実行するアクションは、トランザク
ション終了時にコミットまたはロールバックされます。URI がトランザクションに属してい
ない場合、その URI はトランザクションの影響を受けず、Oracle Application Server はその
URI を通常のリクエストとして扱います(URI が行った変更は、処理の完了時にコミットさ
れます)
。トランザクションに属している URI は、通常、パッケージ内のプロシージャを実
行します。
データベース内での PL/SQL ストアド・プロシージャの URI の順序は、実行されると次の
ようになります。
-- begin a transaction
http://host:port/myApp/cart1/test.txn_begin
-- the first operation in the transaction
http://host:port/myApp/cart1/test.txn_update1
-- the second operation in the transaction
http://host:port/myApp/cart1/test.txn_update2
-- some more operations
-- commit the transaction
http://host:port/myApp/cart1/test.txn_commit
前述の例では、test.begin、test.update1、test.update2 および test.commit は、
データベースに格納されているパッケージ test のプロシージャです。パッケージ test は
トランザクションの境界をマークします。プロシージャには好きな名前を付けることができ
ます。ここで使用されている名前は説明用です。PL/SQL ソース・ファイルを使用する場
合、ソース・ファイル名の最後には、すべて ".sql" を付ける必要があります。
6-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
例
注意 : トランザクションに対応するプロシージャ(トランザクション内
のプロシージャを含む)では、トランザクションをコミットまたはロール
バックする PL/SQL 文をコールしないでください。コールすると、トラン
ザクション・サービス・モデルを使用できなくなります。
コミット・トランザクションまたはロールバック・トランザクションの前にエラーが発生し
た場合は、ロールバック・トランザクションに関連付けられている URI をコールすることに
より、そのトランザクションをロールバックする必要があります。次に、プロシージャ
test.update1 の概要を示します。
procedure test.update1 (...)
begin
-- update some tables here
exception
when appropriate_exception then
owa_util.redirect_URI("/myApp/cart1/test.rollback");
end;
owa_util.redirect_url プロシージャは、HTTP ヘッダーに Location ヘッダーを生成
します。他のプロシージャ内からロールバック・トランザクション・プロシージャを直接
コールすることはできません。
例
ユーザーがショッピング・カートにアイテムを追加でき、ユーザーがコミット・ボタンをク
リックするまで新しい値はコミットされない、エレクトロニック・コマースのアプリケー
ションを設計するとします。例では、前述の表の値を使用しています。
ユーザーが次の URI を実行すると、トランザクションが開始されます。
http://host:port/myApp/cart1/txn_demo.begin_URI
txn_demo.begin_URI プロシージャは、ショッピング・カートに追加するアイテムのリスト
をユーザーに表示する HTML ページを生成します。ユーザーがショッピング・カートにア
イテムを追加すると、この HTML ページがトランザクション内のプロシージャを実行する
ため、追加分はトランザクションの一部とみなされますが、コミットはされません(たとえ
ば、txn_demo.add_item)
。実行されたプロシージャは、単にデータベース表に新しい行を
追加し、ユーザーのショッピング・カートの中身を表示する HTML ページを生成します。
この HTML ページには、トランザクションをコミットまたはロールバックするためのボタ
ンが付いています。コミット・ボタンをクリックすると、ユーザーが購入したものを表示す
る txn_demo.commit_URI プロシージャが実行されます。ロールバック・ボタンをクリック
すると、ユーザーに別のショッピング・カートが必要かどうかを確認する
txn_demo.rollback_URI プロシージャが実行されます。
トランザクション
6-3
例
6-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
7
その他
内容
■
サポートされているデータ型
■
NLS の拡張機能
■
Oracle Web Application Server 3.x から Oracle Application Server 4.0 への PL/SQL カー
トリッジのアップグレード
サポートされているデータ型
HTTP はキャラクタ・ストリームのみサポートするため、PL/SQL カートリッジは次に示す
PL/SQL データ型のサブセットをサポートしています。
■
NUMBER
■
VARCHAR2
■
TABLE OF NUMBER
■
TABLE OF VARCHAR2
レコードはサポートしていません。
NLS の拡張機能
NLS の拡張機能は DAD の設定の一部であり、様々な言語 / フォーマットの値を Oracle
データベースに要求したり、Oracle データベースから取得するための柔軟なインフラストラ
クチャを提供します。データベースが他の NLS 設定を使用して設定されている場合でも、
データベースおよび PL/SQL カートリッジによってすべての変換が暗黙的に処理されます。
たとえば、NLS 通貨に US ドルが設定されているデータベースがあり、ユーザーに日本円の
単位記号で値を表示する場合、NLS 通貨を日本円に設定するだけで済みます。データがデー
タベースから取り出されると、このデータは日本円の単位記号で表示されます。
その他
7-1
NLS の拡張機能
PL/SQL カートリッジは、Oracle データベースがサポートしているすべての NLS 拡張機能
をサポートします。Oracle Web Application Server 3.0 より前のバージョンの PL/SQL カー
トリッジは、NLS_LANGUAGE パラメータのみサポートしていました。このパラメータは、
カートリッジが NLS_LANGUAGE、NLS_TERRITORY および NLS_CHARSET のパラメー
タを導出するために使用していました。
Oracle Web Application Server 3.0 と Oracle Application Server 4.0 では、次に示す NLS 拡
張機能をサポートしています。
■
NLS_DATE_FORMAT はクライアントのブラウザに出力する日付のフォーマットを指定
します。
■
NLS_DATE_LANGUAGE はクライアントのブラウザに出力する日付と月の言語を指定
します。
■
NLS_SORT はデータベースでソートする場合に使用するソートのタイプを指定します。
■
NLS_NUMERIC_CHARACTERS は小数や桁区切り文字を指定します。
■
NLS_CURRENCY はクライアントのブラウザに出力する通貨の値に使用するローカル通
貨システムを指定します。
■
NLS_ISO_CURRENCY は ISO の通貨記号を指定します。
■
NLS_CALENDAR はクライアントのブラウザに出力する日付に使用するカレンダ・シ
ステムを指定します。
新規の NLS 拡張機能パラメータはオプションです。これらのパラメータに値を指定しない
場合、NLS_LANG パラメータからデフォルト値が取得されます。たとえば、NLS_LANG
の値が AMERICAN_AMERICA.US7ASCII の場合には次のようになります。
■
NLS_DATE_LANGUAGE と NLS_SORT の値は、NLS_LANG の言語の部分から導出さ
れます。
■
NLS_CURRENCY、NLS_DATE_FORMAT、NLS_ISO_CURRENCY、
NLS_NUMERIC_CHARACTERS の値は、NLS_LANG の領域から取得されます。
これらのパラメータの有効値と詳細は、Oracle データベースのマニュアルを参照してくださ
い。
注意 : アプリケーション内のすべてのカートリッジが、同じ NLS 環境パ
ラメータを持つように設定する必要があります。たとえば、NLS_LANG
は、1 つのアプリケーション内にあるすべてのカートリッジに対して一度
だけ設定する必要があります。
7-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
Oracle Web Application Server 3.x から Oracle Application Server 4.0 への PL/SQL カートリッジのアップグレード
Oracle Web Application Server 3.x から Oracle Application Server 4.0 への
PL/SQL カートリッジのアップグレード
Oracle Web Application Server 3.x から Oracle Application Server 4.0 にアップグレードする
場合、Oracle Application Server 4.0 で PL/SQL カートリッジを使用するためには、次のス
テップを実行する必要があります。
■
『Oracle Application Server インストレーション・ガイド』の「アップグレード」の章の
アップグレード手順に従ってください。このステップでは、Oracle Web Application
Server 3.0 の PL/SQL Agent を Oracle Application Server 4.0 の PL/SQL カートリッジ
に変換し、Oracle Web Application Server 3.0 の DAD を Oracle Application Server 4.0
の環境にコピーします。
■
"oas_public" 共通スキーマに PL/SQL Web Toolkit がインストールされているかどうか
をチェックします。PL/SQL Web Toolkit は、Oracle Application Server のインストー
ル時にインストールするか、または後で Oracle Application Server Manager を使用して
インストールできます。詳細は、4-2 ページの「PL/SQL Web Toolkit のインストール」
を参照してください。
■
Oracle Web Application Server 3.0 の owa_init パッケージのカスタム設定を保存します。
Oracle Web Application Server 3.0 の PL/SQL Web Toolkit では、owa_init パッケージ
にカスタム設定を指定できました。たとえば、タイム・ゾーンやカスタムの authorize
ファンクションを指定できました。
ご使用の Oracle Web Application Server 3.0 のカスタム設定を保存する場合は、Oracle
Application Server 4.0 の owa_custom パッケージにそれらをコピーします。Oracle
Application Server 4.0 では、これらの設定が owa_init ではなく、owa_custom パッケー
ジに指定されます。別のオプションとして、owa_init パッケージのシノニムを作成する
ことができます。
■
■
Oracle Web Application Server 3.0 のツールキットを各スキーマから削除します。
owa_init パッケージのカスタム設定がすでに保存されていることを確認してください
(設定が存在する場合)。
必要な場合は、プロシージャを更新します。次に示すプロシージャが変更されました。
■
owa_util.mime_header プロシージャは、2 つのパラメータではなく、3 つのパ
ラメータを使用するようになりました。
■
owa_util.cellsprint プロシージャはオーバーロードされて、問合せが返す行
数を指定するための、追加の出力パラメータを使用するようになりました。
その他
7-3
Oracle Web Application Server 3.x から Oracle Application Server 4.0 への PL/SQL カートリッジのアップグレード
7-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
8
トラブルシューティング
内容
■
PL/SQL アプリケーションの実行に関する問題
■
データベースから生成されたエラー・メッセージの表示
■
未処理例外
■
PL/SQL アプリケーションから生成された HTML の表示
■
トレース・レベル
■
エラー・レポート・レベル
PL/SQL アプリケーションの実行に関する問題
PL/SQL アプリケーションを実行できない場合には、次の事項を確認してください。
■
PL/SQL カートリッジが WRB に登録されているか、およびアプリケーションの仮想パ
スが PL/SQL カートリッジにマッピングされているかどうかをチェックします。
■
Web リスナーと WRB が正しく機能しているかどうか確認します。たとえば、他の PL/
SQL アプリケーションやカートリッジを実行できるかどうかをチェックします。サンプ
ルの PL/SQL アプリケーションを実行してみることもお薦めします。
■
URL が参照している PL/SQL サブプログラムがファンクションでなく、プロシージャで
あることを確認します。
トラブルシューティング
8-1
データベースから生成されたエラー・メッセージの表示
データベースから生成されたエラー・メッセージの表示
PL/SQL カートリッジのエラー・レポート・レベルを最大値(2)に設定すると、ユーザー
に返されるデータベースのエラー・メッセージを表示できます。その他のエラー・レベルの
詳細は、8-5 ページの「エラー・レポート・レベル」を参照してください。
PL/SQL カートリッジのロギングをオンにすると、データベース・メッセージのログが、指
定したログ・ファイル(wrb.log)に記録されます。カートリッジのロギングをオンにする
には、
「アプリケーション」の「設定」の「ロギング」ページに移動して、PL/SQL カート
リッジのロギングが使用可能になっていることをチェックします。また、ロギング・レベル
もチェックします。ロギング・レベルを上げると、より多くのメッセージを取得できます。
詳細は、8-4 ページの「トレース・レベル」を参照してください。
未処理例外
PL/SQL プロシージャでエラーが発生すると、例外が返されます。例外を処理しない場合、
エラーは Oracle エラー・スタックとともにログ・ファイルに出力され、ユーザーにエラー・
メッセージが返されます。エラー・レポート・レベルは、ユーザーへのエラー表示を制御し
ます。その他のエラー・レベルの詳細は、8-5 ページの「エラー・レポート・レベル」を参
照してください。
未処理例外でプロシージャが終了すると、PL/SQL は OUT パラメータに値を設定せず、プ
ロシージャが行ったデータベース処理をコミットしない点に注意してください。
プロシージャのトップ・レベルに OTHERS ハンドラをコーディングすると、未処理例外を
回避できます。
PL/SQL アプリケーションから生成された HTML の表示
PL/SQL Web Toolkit には owa_util.showpage プロシージャが含まれており、Oracle
Server Manager でこれを使用してアプリケーションの実行結果を出力できます。次の例で
は、current_users プロシージャ(第 2 章「チュートリアル」で説明)から生成された
HTML を出力します。
% svrmgrl
Oracle Server Manager Release 2.3.2.0.0 - Production
Copyright (c) Oracle Corporation 1994, 1995. All rights reserved.
Oracle7 Server Release 7.3.2.1.0 - Production Release
With the distributed option
PL/SQL Release 2.3.2.0.0 - Production
SVRMGR> connect scott/tiger
Connected.
SVRMGR> set serveroutput on
Server Output
ON
SVRMGR> execute current_users
Statement processed.
8-2 Oracle Application Server PL/SQL アプリケーション開発者ガイド
PL/SQL アプリケーションから生成された HTML の表示
SVRMGR> execute owa_util.showpage
Statement processed.
<HTML>
<HEAD>
<TITLE>Current Users</TITLE>
</HEAD>
<BODY>
<H1>Current Users</H1>
<TABLE >
<TR>
<TH>USERNAME</TH>
<TH>USER_ID</TH>
<TH>CREATED</TH>
</TR>
<TR>
<TD ALIGN="LEFT">SYS</TD>
<TD ALIGN="LEFT">0</TD>
<TD ALIGN="LEFT">21-JAN-97</TD>
</TR>
<TR>
<TD ALIGN="LEFT">SYSTEM</TD>
<TD ALIGN="LEFT">5</TD>
<TD ALIGN="LEFT">21-JAN-97</TD>
</TR>
<TR>
<TD ALIGN="LEFT">WWW_USER</TD>
<TD ALIGN="LEFT">11</TD>
<TD ALIGN="LEFT">27-JAN-97</TD>
</TR>
<TR>
<TD ALIGN="LEFT">TRACESVR</TD>
<TD ALIGN="LEFT">8</TD>
<TD ALIGN="LEFT">21-JAN-97</TD>
</TR>
<TR>
<TD ALIGN="LEFT">SCOTT</TD>
<TD ALIGN="LEFT">9</TD>
<TD ALIGN="LEFT">21-JAN-97</TD>
</TR>
<TR>
<TD ALIGN="LEFT">WWW_DBA</TD>
<TD ALIGN="LEFT">10</TD>
<TD ALIGN="LEFT">27-JAN-97</TD>
</TR>
</TABLE>
</BODY>
</HTML>
トラブルシューティング
8-3
トレース・レベル
トレース・レベル
トレース・レベルを上げることにより、PL/SQL カートリッジの処理の詳細情報を入手でき
ます。トレースのメッセージは wrb.log ファイルにのみ出力され、ユーザーには表示されま
せん。
詳細レベルの範囲は 0 から 15 です。低い値はエラーのみがログ出力されることを示し、高
い値は警告と情報量が多いメッセージもログ出力されることを示します。たとえば、詳細レ
ベルを 8 に設定すると、いつカートリッジが認証と実行操作を行ったのかがわかります。次
の表に、詳細レベルについての説明を示します。
表 8-1 詳細レベル
詳細
レベル
推奨する使用方法
致命的エラー(メモリー・
エラーなど)
0
致命的なエラーが発生した場合は 0。
軽度のエラー(致命的では
ない入出力エラーなど)
1
ファイルまたはデータベースへの書込みに失敗した場
合は 1。
意味
警告(ファイルまたは設定
セクションが見つからない
場合など)
トレース(リクエストの実
行など)
2
(ユーザー定義)
3
(ユーザー定義)
4
ファイルまたはディレクトリが存在しない、設定ファ
イルのセクションが欠落している、などの設定エラー
が発生した場合は 4。
5
(ユーザー定義)
6
(ユーザー定義)
7
プロセス・イベント(プロセスの初期化、リロード、
終了段階など)をトレースする場合は 7。
8
スレッドの初期化や終了段階などのスレッド・イベン
トのトレースを行う場合は 8。
9
リクエスト・イベント(リクエストを受信した場合な
ど)をトレースする場合は 9。
10
リクエスト実行中に発生するメッセージの場合は 10。
11
リクエスト認証中に発生するメッセージの場合は 11。
12
(ユーザー定義)
8-4 Oracle Application Server PL/SQL アプリケーション開発者ガイド
エラー・レポート・レベル
表 8-1 詳細レベル
意味
デバッグ
(変数のロギングなど)
詳細
レベル
推奨する使用方法
13
変数のデバッグを出力する場合は 13。
14
(ユーザー定義)
15
(ユーザー定義)
エラー・レポート・レベル
PL/SQL カートリッジは、3 つのレベルのエラー・レポートをサポートします。これらのレ
ベルは、エラー発生時のユーザーへのエラー表示を制御します。Oracle Web Application
Server 3.0 より前のバージョンでは、エラー発生時に PL/SQL カートリッジが静的ファイル
を表示し、ブラウザではそのエラーを表示できませんでした。
エラー・レベルは、PL/SQL カートリッジの一部として設定されます。エラーは exec コー
ルバック関数の実行中のみレポートされます。
表 8-2 エラー・レポート・レベル
エラー・レベル 説明
0
エラーが発生すると、クライアントのブラウザに静的ファイルを表示します。
エラーについての情報をユーザーに表示しない場合にこのレベルを使用しま
す。
クライアントに返すファイルを指定できます。デフォルトのファイルは、
$ORAWEB_HOME/../cartx/plsql/install/error.html です。
1
エラー発生の日時とエラーの原因となった URL を表示します。Web サイト管
理者やアプリケーション開発者に渡すための必要最低限の情報のみユーザーに
提供する場合に、このレベルを使用します。サイト・マネージャと開発者はこ
の情報を使用してログ・ファイルのエラーを解析します。
このエラー・レベルを指定すると、エラー・ページ(指定がある場合)は無視
されます。
例:
Error occurred while accessing "/test/myproc" at Mon Jan 6 16:33:32 1997
トラブルシューティング
8-5
エラー・レポート・レベル
表 8-2 エラー・レポート・レベル
エラー・レベル 説明
2
エラー発生の日時、URL、カートリッジ名、コールされたプロシージャ、パラ
メータ名と値、Web サーバーのエラー・コードおよびコール・スタック付きの
データベース・エラーなど、詳細な情報が表示されます。通常、このエラー・
レベルはアプリケーションの開発やデバッグ中にのみ使用されます。
例:
Error occurred at Mon Jan 6 16:33:32 1997
OWS-05101: Agent: exexution failed due to Oracle error 6564
ORA-06564: object show_stats does not exist
ORA-06512: at "SYS.DBMS_DESCRIBE", line 55
ORA-06512: at line 1
OWA SERVICE: OWA_DEFAULT_SERVICE
PROCEDURE: show_stats
8-6 Oracle Application Server PL/SQL アプリケーション開発者ガイド
索引
数字
H
4.0 における相違点
トランザクション・サービス,6-1
HTML
PL/SQL アプリケーションから生成される,8-2
拡張,4-10
HTML エレメント
属性,4-8
B
Basic_Oracle セキュリティ方式
PL/SQL カートリッジ,5-2
I
C
ICX サービス
PL/SQL カートリッジ,4-10
Cookie
PL/SQL Web Toolkit,4-9
PL/SQL カートリッジ,4-5,4-9
L
LONG データ型,4-9
D
DAD
Database Access Descriptor(DAD)を参照
Database Access Descriptor(DAD),1-2
作成,2-3,3-3
ダイアログ・ボックス,2-4
E
exec 関数
レポートされるエラー,8-5
F
foo.authorize ファンクション,5-6
N
NLS
PL/SQL カートリッジの拡張,7-1
NLS の拡張機能,7-1
O
oas_public スキーマ,4-2
ORACLE_HOME ディレクトリ,2-2
ORACLE_SID フィールド,2-4
Oracle データベース・ファイル,2-2
owa_custom.authorize ファンクション,5-4
owa_pattern.change ファンクションまたはプロシー
ジャ,4-18
owa_pattern.match ファンクション,4-17
OWA_SEC.CUSTOM 変数,5-7
OWA_SEC.GLOBAL 変数,5-6
索引 -1
OWA_SEC.PER_PACKAGE 変数,5-6
owa_sec.set_authorization プロシージャ,5-4
owa_util.showpage プロシージャ,8-2
owains.sql,4-2
P
PL/SQL Agent
∼とリスナーのポート番号,3-11
PL/SQL Web Toolkit
HTML タグの属性,4-8
ICX,4-10
PL/SQL カートリッジとアプレット,4-8
インストール,4-2
インストール・フォーム,4-3
カスタマイズ,4-10
共通スキーマ,4-1
セッション /Cookie,4-9
パッケージ,4-4
パッケージの拡張,4-10
パラメータ名,4-8
文字列のマッチングと操作,4-16
PL/SQL アプリケーション
HTML 生成,8-2
設定,3-7
追加,3-1
追加と実行,3-1
PL/SQL カートリッジ
Cookie,4-9
DAD,1-2
DAD の作成,2-3
LONG データ型 , と,4-9
NLS の拡張機能,7-1
PL/SQL Web Toolkit の使用,4-1
PL/SQL カートリッジを実行する URL,1-1
SQL ファイルの実行,3-18
アップグレード,7-3
アプリケーションとカートリッジの追加,3-2
エラー・レポート・レベル,8-5
概要,1-1
カスタム認証,5-4
サブプログラムに受け渡されるパラメータ,4-8
サポートされているデータ型,7-1
実行,3-1,3-9
詳細レベル,8-4
チュートリアル,2-1
∼と ICX,4-10
索引 -2
動的なユーザー名 / パスワード認証,5-1
トラブルシューティング,8-1
トランザクション,6-1
例,6-3
トレース・レベル,8-4
認証とセキュリティ,5-1
パッケージ
htf パッケージ,4-4
htp,4-4
htp パッケージと htf パッケージの拡張,4-10
owa,4-4
owa_content,4-5
owa_cookie,4-5
owa_custom,4-5
owa_image,4-4,4-6
owa_init,7-3
owa_opt_lock,4-5
owa_pattern,4-4
owa_sec,4-4,5-5
owa_text,4-4
owa_util,4-4
パッケージのインストール,2-3
パラメータ
PL/SQL ソース・ファイルへの受渡し,3-19
位置∼,3-17
複数の値を持つ変数,3-12
プロシージャのオーバーロード,3-11
文字列のマッチングと操作,4-16
ユーザー名 / パスワード認証,5-1
ライフ・サイクル,3-20
リクエスト処理,1-3
PL/SQL カートリッジでサポートされているデータ型,
7-1
PL/SQL カートリッジでのエラー・レポート・レベル,
8-5
PL/SQL カートリッジの PL/SQL 表,3-12
PL/SQL 配列
∼とオーバーロード,3-12
「PL/SQL パラメータ」フォーム,3-8
privcust.sql ファイル,5-4
S
SQL ファイル
実行,3-18
U
す
URL
トランザクション・サービス,6-2
ストアド・プロシージャ
URL で実行,6-2
作成,2-2
あ
アップグレード
PL/SQL カートリッジ,7-3
アップロード・フォーム,4-12
アプリケーション
PL/SQL カートリッジ , 追加,3-2
え
エラー・メッセージ
データベースから生成される,8-2
せ
セキュリティ
PL/SQL カートリッジ,5-1
認証サーバー方式,5-2
セッション
PL/SQL Web Toolkit,4-9
た
ダウンロード・フォーム,4-15
か
ち
概要
PL/SQL カートリッジ,1-1
確保されているキーワード,1-5
カスタム認証
PL/SQL カートリッジ,5-4,5-5
値,5-5
使用可能,5-4
仮想パス
PL/SQL カートリッジ,3-3
保護,5-3
チュートリアル
PL/SQL カートリッジ,2-1
と
キーワード , 確保されている∼,1-5
動的ユーザー名 / パスワード・セキュリティ方式
PL/SQL カートリッジ,5-2
トラブルシューティング
PL/SQL カートリッジ,8-1
トランザクション・サービス
PL/SQL カートリッジ,6-1
例,6-3
トレース・レベル
PL/SQL カートリッジ,8-4
こ
に
コールバック関数
認証ファンクション,5-4
認証,3-20
PL/SQL カートリッジ,5-1,5-4
認証 , カスタム
PL/SQL カートリッジ,5-5
認証サーバー・セキュリティ方式,5-2
authorize ファンクション
PL/SQL カートリッジ,5-4
き
し
実行,3-21
シャットダウン,3-21
詳細レベル
PL/SQL カートリッジ,8-4
初期化,3-20
索引 -3
は
パッケージ
htf パッケージ,4-4
htp パッケージ,4-4
PL/SQL カートリッジ
owa_content パッケージ,4-5
owa_cookie パッケージ,4-5
owa_custom パッケージ,4-5
owa_image パッケージ,4-4,4-6
owa_init パッケージ,7-3
owa_opt_lock パッケージ,4-5
owa_pattern,4-4
owa_sec パッケージ,4-4
owa_text パッケージ,4-4
owa_util パッケージ,4-4
owa パッケージ,4-4
インストール,2-3
htp パッケージと htf パッケージの拡張,4-10
パラメータ
NLS の拡張機能,7-2
ふ
ファイル privcust.sql,5-4
ファンクション
authorize,5-4
foo.authorize,5-6
owa_custom.authorize,5-4
物理パス
PL/SQL カートリッジ,3-3
PL/SQL ソース・ファイルの∼,3-19
プロシージャのオーバーロード
PL/SQL カートリッジ,3-11
ほ
保護
PL/SQL カートリッジ,5-1
み
未処理例外,8-2
も
文字列
索引 -4
PL/SQL カートリッジでのマッチングと操作,4-16
り
リスナーのポート番号
∼と PL/SQL Agent,3-11
れ
例外 , 未処理,8-2
Fly UP