88
Oracle Application Server PL/SQL アプリケーション開発者ガイド リリース 4.0.8.2 2000 11 部品番号 : J01404-01

Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

Oracle Application Server

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

リリース 4.0.8.2

2000年 11月

部品番号 : J01404-01

Page 2: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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.

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

Page 3: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

目次目次目次目次

はじめにはじめにはじめにはじめに .......................................................................................................................................................................... vii

1 PL/SQLカートリッジの概要カートリッジの概要カートリッジの概要カートリッジの概要設定情報設定情報設定情報設定情報 ................................................................................................................................................................... 1-1通信経路通信経路通信経路通信経路 ................................................................................................................................................................... 1-3

POST方式と方式と方式と方式とGET方式方式方式方式 ........................................................................................................................................ 1-4確保されているキーワード確保されているキーワード確保されているキーワード確保されているキーワード ................................................................................................................................... 1-5

2 チュートリアルチュートリアルチュートリアルチュートリアル

1.ストアド・プロシージャの作成およびデータベースへのロードストアド・プロシージャの作成およびデータベースへのロードストアド・プロシージャの作成およびデータベースへのロードストアド・プロシージャの作成およびデータベースへのロード ............................................................... 2-22. アプリケーションおよびそのコンポーネントの作成アプリケーションおよびそのコンポーネントの作成アプリケーションおよびそのコンポーネントの作成アプリケーションおよびそのコンポーネントの作成 ................................................................................... 2-33.リロードリロードリロードリロード ............................................................................................................................................................... 2-6

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

3 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-9URLの形式 ...................................................................................................................................................... 3-9

iii

Page 4: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

プロシージャの記述のキャッシュ ............................................................................................................. 3-10

プロシージャのオーバーロードプロシージャのオーバーロードプロシージャのオーバーロードプロシージャのオーバーロード ......................................................................................................................... 3-11PL/SQL配列のオーバーロード ................................................................................................................. 3-12

複数の値を持つ変数複数の値を持つ変数複数の値を持つ変数複数の値を持つ変数 ............................................................................................................................................. 3-12柔軟なパラメータの受渡し柔軟なパラメータの受渡し柔軟なパラメータの受渡し柔軟なパラメータの受渡し ................................................................................................................................. 3-16位置パラメータ位置パラメータ位置パラメータ位置パラメータ ..................................................................................................................................................... 3-17

SQLファイルの実行ファイルの実行ファイルの実行ファイルの実行 ............................................................................................................................................ 3-18PL/SQLソース・ファイルの場所 ............................................................................................................. 3-19

パラメータ ..................................................................................................................................................... 3-19

PL/SQLカートリッジのライフ・サイクルカートリッジのライフ・サイクルカートリッジのライフ・サイクルカートリッジのライフ・サイクル ..................................................................................................... 3-20初期化 ............................................................................................................................................................. 3-20

認証 ................................................................................................................................................................. 3-20

実行 ................................................................................................................................................................. 3-21

シャットダウン ............................................................................................................................................. 3-21

4 PL/SQL Web Toolkitの使用の使用の使用の使用共通スキーマ共通スキーマ共通スキーマ共通スキーマ ........................................................................................................................................................... 4-1

PL/SQL Web Toolkitのインストールのインストールのインストールのインストール ............................................................................................................... 4-2PL/SQL Web Toolkitのパッケージのパッケージのパッケージのパッケージ ................................................................................................................... 4-4

htpと htf .......................................................................................................................................................... 4-5

owa_image ...................................................................................................................................................... 4-6owa_opt_lock .................................................................................................................................................. 4-6owa_custom .................................................................................................................................................... 4-6

owa_content .................................................................................................................................................... 4-7

PL/SQL Web Toolkitのパラメータ名の表記規則のパラメータ名の表記規則のパラメータ名の表記規則のパラメータ名の表記規則 ........................................................................................... 4-8HTMLタグの属性タグの属性タグの属性タグの属性 ................................................................................................................................................. 4-8

PL/SQLカートリッジとアプレットカートリッジとアプレットカートリッジとアプレットカートリッジとアプレット ................................................................................................................... 4-8セッションとセッションとセッションとセッションと Cookie ............................................................................................................................................. 4-9LONGデータ型データ型データ型データ型 ..................................................................................................................................................... 4-9Inter-Cartridge Exchange((((ICX)))) ...................................................................................................................... 4-10

htpパッケージとパッケージとパッケージとパッケージと htfパッケージの拡張パッケージの拡張パッケージの拡張パッケージの拡張 .......................................................................................................... 4-10ファイルのアップロードおよびダウンロードファイルのアップロードおよびダウンロードファイルのアップロードおよびダウンロードファイルのアップロードおよびダウンロード ................................................................................................. 4-11アップロード ................................................................................................................................................. 4-11

ダウンロード ................................................................................................................................................. 4-14

文字列のマッチングと操作文字列のマッチングと操作文字列のマッチングと操作文字列のマッチングと操作 ................................................................................................................................. 4-16owa_pattern.match ...................................................................................................................................... 4-17

iv

Page 5: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

owa_pattern.change ..................................................................................................................................... 4-18

5 認証とセキュリティ認証とセキュリティ認証とセキュリティ認証とセキュリティ

動的なユーザー名動的なユーザー名動的なユーザー名動的なユーザー名 /パスワード認証パスワード認証パスワード認証パスワード認証 .................................................................................................................... 5-1動的ユーザー名動的ユーザー名動的ユーザー名動的ユーザー名 /パスワードおよびパスワードおよびパスワードおよびパスワードおよび Basic_Oracle方式方式方式方式 .................................................................................. 5-2PL/SQLカートリッジおよび認証サーバー方式カートリッジおよび認証サーバー方式カートリッジおよび認証サーバー方式カートリッジおよび認証サーバー方式 ............................................................................................... 5-2カスタム認証カスタム認証カスタム認証カスタム認証 ........................................................................................................................................................... 5-4

OWA_SEC.GLOBAL ..................................................................................................................................... 5-6OWA_SEC.PER_PACKAGE ......................................................................................................................... 5-6OWA_SEC.CUSTOM ..................................................................................................................................... 5-7

6 トランザクショントランザクショントランザクショントランザクション

トランザクション・サービスのメカニズムトランザクション・サービスのメカニズムトランザクション・サービスのメカニズムトランザクション・サービスのメカニズム ....................................................................................................... 6-2例例例例 ............................................................................................................................................................................... 6-3

7 その他その他その他その他

サポートされているデータ型サポートされているデータ型サポートされているデータ型サポートされているデータ型 ............................................................................................................................... 7-1NLSの拡張機能の拡張機能の拡張機能の拡張機能 ...................................................................................................................................................... 7-1Oracle Web Application Server 3.xからからからから Oracle Application Server 4.0へのへのへのへの PL/SQLカートリッジのカートリッジのカートリッジのカートリッジのアップグレードアップグレードアップグレードアップグレード ....................................................................................................................................................... 7-3

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

PL/SQLアプリケーションの実行に関する問題アプリケーションの実行に関する問題アプリケーションの実行に関する問題アプリケーションの実行に関する問題 ............................................................................................... 8-1データベースから生成されたエラー・メッセージの表示データベースから生成されたエラー・メッセージの表示データベースから生成されたエラー・メッセージの表示データベースから生成されたエラー・メッセージの表示 ............................................................................... 8-2未処理例外未処理例外未処理例外未処理例外 ............................................................................................................................................................... 8-2

PL/SQLアプリケーションから生成されたアプリケーションから生成されたアプリケーションから生成されたアプリケーションから生成された HTMLの表示の表示の表示の表示 ............................................................................. 8-2トレース・レベルトレース・レベルトレース・レベルトレース・レベル ................................................................................................................................................... 8-4エラー・レポート・レベルエラー・レポート・レベルエラー・レポート・レベルエラー・レポート・レベル ................................................................................................................................... 8-5

索引索引索引索引

v

Page 6: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

vi

Page 7: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

対象読者対象読者対象読者対象読者このマニュアルは、Oracle Application Serverの PL/SQLカートリッジを使用してWebアプリケーションを開発する方を対象にしています。

Oracle Application ServerOracle Application ServerOracle Application ServerOracle 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

Page 8: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

Oracle Application Server JServlet Toolkit クイック・リファレンス J01426-01

Oracle Application Server カートリッジ・マネージメント・フレームワーク J01412-01

Oracle Application Server エラー・メッセージ J00103-01

表記規則表記規則表記規則表記規則 例例例例 説明説明説明説明

太字 oas.howsctlwrbcfgwww.oracle.com

ファイル名、ユーティリティ、プロセス、および URLを表します。

斜体 file1 テキスト内の可変部分を表します。このプレースホルダを特定の値や文字列に置き換えます。

山カッコ <filename> コード内の可変部分を表します。このプレースホルダを特定の値や文字列に置き換えます。

固定幅フォント owsctl start wrb 表示どおりに入力するテキスト。関数にも使用します。

大カッコ [-c string]

[on|off]

オプション項目を表します。

オプション項目の選択肢がそれぞれ垂直バー(|)で区切って示され、その中のいずれか 1つを選択できます。

中カッコ {yes|no} 必須項目の選択肢が垂直バー(|)で区切って示されます。

省略記号 n,... その前の項目を何回でも繰り返すことができることを表します。

マニュアル名マニュアル名マニュアル名マニュアル名 部品番号部品番号部品番号部品番号

viii

Page 9: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLカートリッジの

1

PL/SQLカートリッジの概要カートリッジの概要カートリッジの概要カートリッジの概要

PL/SQLカートリッジは、ユーザーがブラウザを使用して、Oracleデータベースに格納されている PL/SQLプロシージャを実行できる環境を提供します。ストアド・プロシージャにより、データベースの表からデータを取り出して、クライアントのブラウザに返すデータが入った HTMLページを生成できます。

PL/SQLは、リレーショナル・データベースの標準のデータ・アクセス言語である SQLにOracleのプロシージャ型言語を追加したものです。

内容内容内容内容� 設定情報

� 通信経路

� POST方式と GET方式

� 確保されているキーワード

設定情報設定情報設定情報設定情報PL/SQLカートリッジを使用すると、Oracleデータベースのストアド・プロシージャを実行するアプリケーションを作成できます。図 1-1のような設定情報をカートリッジに設定します。

概要 1-1

Page 10: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

設定情報

図図図図 1-1 PL/SQLカートリッジの設定情報カートリッジの設定情報カートリッジの設定情報カートリッジの設定情報

各 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の設定情報は、カートリッジ本体で設定されるようになりました。

PL/SQLカートリッジ

- 仮想パス- Database Access Descriptor- 返すエラー・メッセージのレベル- カートリッジを保護するかどうか

データベース名NLS情報ユーザー名パスワード

- 名前

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

Page 11: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

通信経路

通信経路通信経路通信経路通信経路また、PL/SQLカートリッジは仮想パスに関連付けられます。この仮想パスを使用して PL/SQLカートリッジを実行します。URLには、ストアド・プロシージャに必要なパラメータの値を含めることもできます。図 1-2に URLの一部を示します。

図図図図 1-2 PL/SQLカートリッジのカートリッジのカートリッジのカートリッジの URL の構造の構造の構造の構造

それぞれ専用の設定値を持つ 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カートリッジとクライアントに返されます。

http://www.acme.com/appname/cartname/get_emp?fname=chris

ドメインドメインドメインドメイン プロシージャプロシージャプロシージャプロシージャPL/SQLPL/SQLPL/SQLPL/SQLカートリッジカートリッジカートリッジカートリッジプロシージャプロシージャプロシージャプロシージャストアドストアドストアドストアド

の仮想パスの仮想パスの仮想パスの仮想パス のパラメータのパラメータのパラメータのパラメータ

PL/SQLカートリッジの概要 1-3

Page 12: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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章「認証とセキュリティ」を参照してください。

POSTPOSTPOSTPOST方式と方式と方式と方式と GETGETGETGET方式方式方式方式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アプリケーション開発者ガイド

Page 13: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

確保されているキーワード

一般的に、大量のパラメータ・データをサーバーに渡す場合は、POST方式を使用することをお薦めします。

確保されているキーワード確保されているキーワード確保されているキーワード確保されているキーワードOracle Application Serverでは、内部的に次のキーワードが使用されます。 アプリケーションの開発時に、これらのキーワードを変数名、パラメータ名または Cookie文字列に使用しないでください。使用した場合、予期しない結果が発生する可能性があります。

file SessionID SessionOR

SessionVpath

PL/SQLカートリッジの概要 1-5

Page 14: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

確保されているキーワード

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

Page 15: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

チュートリ

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

Page 16: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

1.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_usersAS 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アプリケーション開発者ガイド

Page 17: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

2. アプリケーションおよびそのコンポーネントの作成

SQL> @current_users.sqlProcedure created.No errors.

4. SQL*Plusを終了します。

SQL> exit

2. 2. 2. 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

Page 18: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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アプリケーション開発者ガイド

Page 19: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

Page 20: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

3.リロード

3.3.3.3.リロードリロードリロードリロードOracle Application Serverを再設定した後に、サーバーをリロードして新規設定を有効にする必要があります。Oracle Application Serverをリロードする方法は次のとおりです。

1. Oracle Application Server Managerで「アプリケーション」を選択します。これにより、右フレームにアプリケーションのリストが表示されます。

2. 「すべて」を選択します。

3. をクリックして、Oracle Application Serverをリロードします。

また、新しい仮想パスが有効になるように、リスナーを停止して再起動する必要があります。リスナーを停止して再起動する方法は次のとおりです。

1. ナビゲーション・ツリーから「HTTPリスナー」をクリックし、リスナーのリストを表示します。

2. 停止するリスナーを選択します。該当するアプリケーションのリクエストを処理するリスナーはすべて選択する必要があります。

3. をクリックしてリスナーを停止します。

4. をクリックしてリスナーを再起動します。

4.4.4.4.アプリケーションの実行用のアプリケーションの実行用のアプリケーションの実行用のアプリケーションの実行用の HTMLHTMLHTMLHTMLページの作成ページの作成ページの作成ページの作成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>

注意 : Oracle Application Serverコンポーネントを停止して再起動した場合は、リスナーも停止して再起動する必要があります。

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

Page 21: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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_userscurrent_userscurrent_userscurrent_usersプロシージャによってプロシージャによってプロシージャによってプロシージャによって生成されるページ生成されるページ生成されるページ生成されるページ

チュートリアル 2-7

Page 22: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

4.アプリケーションの実行用の HTMLページの作成

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

Page 23: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLアプリケーションの追加と

3

PL/SQLアプリケーションの追加と実行アプリケーションの追加と実行アプリケーションの追加と実行アプリケーションの追加と実行

この章では、Oracle Application Serverに PL/SQLアプリケーションを追加する方法およびこれをブラウザから実行する方法について説明します。

内容内容内容内容� PL/SQLアプリケーションの追加

� PL/SQLアプリケーションの設定

� PL/SQLカートリッジの実行

� プロシージャのオーバーロード

� 複数の値を持つ変数

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

� 位置パラメータ

� SQLファイルの実行

� PL/SQLカートリッジのライフ・サイクル

PL/SQLPL/SQLPL/SQLPL/SQLアプリケーションの追加アプリケーションの追加アプリケーションの追加アプリケーションの追加Oracle Application Serverに PL/SQLアプリケーションを追加するには、次のステップを実行します。

1. アプリケーションを追加する。

2. アプリケーションにカートリッジを追加する。

3. Oracle Application Serverに Database Access Descriptor(DAD)を追加する。DADは、2つ以上のカートリッジで共有できます。カートリッジの追加時または追加前に、DADを追加できます。

実行 3-1

Page 24: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLアプリケーションの追加

アプリケーションとカートリッジの追加アプリケーションとカートリッジの追加アプリケーションとカートリッジの追加アプリケーションとカートリッジの追加次のステップにより、アプリケーションとカートリッジを Oracle Application Serverに追加できます。

1. ブラウザを起動し、Oracle Application Serverの管理ページのトップ・ページを表示します。

2. サイト名の横の をクリックして、そのサイトのコンポーネントを表示します。「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アプリケーション開発者ガイド

Page 25: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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 DescriptorDatabase Access DescriptorDatabase Access DescriptorDatabase Access Descriptor((((DADDADDADDAD)の作成)の作成)の作成)の作成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

Page 26: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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アプリケーション開発者ガイド

Page 27: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLアプリケーションの追加

図図図図 3-1 PL/SQLアプリケーション、アプリケーション、アプリケーション、アプリケーション、PL/SQLカートリッジおよびカートリッジおよびカートリッジおよびカートリッジおよび DADを作成するためのダイアロを作成するためのダイアロを作成するためのダイアロを作成するためのダイアログ・ボックスグ・ボックスグ・ボックスグ・ボックス

Oracle Application ServerOracle Application ServerOracle Application ServerOracle Application Serverの開始と停止の開始と停止の開始と停止の開始と停止Oracle Application Serverにアプリケーションを追加した後にWebリスナーとWeb Request Broker(WRB)を停止して再起動する必要があります。詳細は、第 2章「チュートリアル」の「3.リロード」を参照してください。

既存のアプリケーションへのカートリッジの追加既存のアプリケーションへのカートリッジの追加既存のアプリケーションへのカートリッジの追加既存のアプリケーションへのカートリッジの追加PL/SQLアプリケーションは 1つ以上のカートリッジを持つことができます。アプリケーションが複数のデータベースにアクセスする必要がある場合は、PL/SQLアプリケーションに複数のカートリッジが必要です。

カートリッジを PL/SQLアプリケーションに追加するには、次のステップを実行します。

1. ナビゲーション・ツリーで、カートリッジの追加先の PL/SQLアプリケーションの下の「カートリッジ」を選択します。

「アプリケーションの追加」(「PL/SQL」、「手動」)

「PL/SQLカートリッジの追加」ダイアログ・ボックス

「DADの追加」(データベース・ログイン・データ)

「アプリケーションの追加」(「アプリケーション名」、「表示名」、「バージョン」)

「成功」(「このアプリケーションにカートリッジを追加」ボタン)

(「カートリッジ名」、「表示名」、「仮想パス」、「物理パス」、「DAD名」)

PL/SQLアプリケーションの追加と実行 3-5

Page 28: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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アプリケーション開発者ガイド

Page 29: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLアプリケーションの設定

次の図に、入力が完了したダイアログ・ボックスのサマリーを示します。ダイアログ・ボックスのフィールドはカッコ内にリストされています。

図図図図 3-3 PL/SQLカートリッジを追加するためのダイアログ・ボックスカートリッジを追加するためのダイアログ・ボックスカートリッジを追加するためのダイアログ・ボックスカートリッジを追加するためのダイアログ・ボックス

PL/SQLPL/SQLPL/SQLPL/SQLアプリケーションの設定アプリケーションの設定アプリケーションの設定アプリケーションの設定設定用フォームは、「アプリケーション」の「設定」と「カートリッジ」の「設定」の 2つのセクションに分かれています。「アプリケーション」の「設定」セクションのフォームには、アプリケーション全体に適用されるパラメータが入っています。一方、「カートリッジ」の「設定」セクションのフォームには、特定のカートリッジにのみ適用されるパラメータが入っています。

「アプリケーション」の「設定」「アプリケーション」の「設定」「アプリケーション」の「設定」「アプリケーション」の「設定」「アプリケーション」の「設定」パラメータは、すべてのタイプのアプリケーションについて同じであるため、『Oracle Application Server 管理者ガイド』の第 8章「アプリケーションの管理」で説明します。

「カートリッジ」の「設定」「カートリッジ」の「設定」「カートリッジ」の「設定」「カートリッジ」の「設定」PL/SQLカートリッジの「カートリッジ」の「設定」セクションには「仮想パス」と「PL/SQLパラメータ」の 2つのフォームが含まれます。

「仮想パス」フォーム「仮想パス」フォーム「仮想パス」フォーム「仮想パス」フォーム各 PL/SQLカートリッジは仮想パスにマップされ、ユーザーは URLにこの仮想パスを指定してカートリッジを実行します。PL/SQLカートリッジの仮想パスのコンポーネントの最後に、実行するストアド・プロシージャを指定します。たとえば、仮想パス /hr/benefitsを

注意注意注意注意 : 追加した新規カートリッジをナビゲーション・ツリーに表示するには、[Shift]キーを押しながらブラウザの「リロード」ボタンをクリックします。

「PL/SQLカートリッジの追加」ダイアログ・ボックス

「DADの追加」(データベース・ログイン・データ)

「カートリッジの追加」(「手動」)

(「カートリッジ名」、「表示名」、「仮想パス」、「物理パス」、「DAD名」)

PL/SQLアプリケーションの追加と実行 3-7

Page 30: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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/SQLPL/SQLPL/SQLPL/SQLパラメータ」フォームパラメータ」フォームパラメータ」フォームパラメータ」フォーム「PL/SQLパラメータ」フォームを使用して、次の内容を指定できます。

� PL/SQLカートリッジに関連付けられる DAD

� 保護を使用可能にするかどうか

� エラーが発生した場合に表示する HTMLページ

� エラーが発生した場合、どの程度のエラー情報をユーザーに表示するか

� アップロードされたファイルが圧縮フォーマットで保管されるかどうか

図図図図 3-4 「「「「PL/SQL パラメータ」フォームパラメータ」フォームパラメータ」フォームパラメータ」フォーム

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

Page 31: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLカートリッジの実行

PL/SQLPL/SQLPL/SQLPL/SQLカートリッジの実行カートリッジの実行カートリッジの実行カートリッジの実行ブラウザまたは HTMLページに URLを入力することにより、PL/SQLカートリッジを実行します。

URLURLURLURLの形式の形式の形式の形式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

Page 32: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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アプリケーション開発者ガイド

Page 33: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

プロシージャのオーバーロード

プロシージャのオーバーロードプロシージャのオーバーロードプロシージャのオーバーロードプロシージャのオーバーロード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 cartridgeCREATE 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 cartridgeCREATE 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

Page 34: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

複数の値を持つ変数

PL/SQLPL/SQLPL/SQLPL/SQL配列のオーバーロード配列のオーバーロード配列のオーバーロード配列のオーバーロードパラメータ名が同じで、1つのプロシージャのデータ型が owa_util.ident_arr、もう 1つのプロシージャのデータ型がスカラー型のオーバーロードされた PL/SQLプロシージャがあるとします。このような場合でも、PL/SQLカートリッジはこの 2つのプロシージャを区別できます。たとえば、次のようなプロシージャがあるとします。

CREATE PACKAGE my_pkg ASPROCEDURE my_proc (val IN VARCHAR2); -- scalar data typePROCEDURE 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アプリケーション開発者ガイド

Page 35: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

複数の値を持つ変数

値は位置ではなく名前によってプロシージャのパラメータに渡されるため、複数の値を持つ変数がない場合は、値の順序を気にする必要はありません。

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 arehandled by the PL/SQL Cartridge. The form has one SELECTelement 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

Page 36: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

複数の値を持つ変数

<input type=checkbox name="machines" value="PC">PC<br><input type=checkbox name="machines" value="Mac">Mac<br><input type=checkbox name="machines" value="Sun">Sun<br><input type=checkbox name="machines" 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アプリケーション開発者ガイド

Page 37: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

複数の値を持つ変数

create or replace procedure dept_machine (departments IN owa_util.ident_arr,machines IN owa_util.ident_arr )

IScounter INTEGER;ct INTEGER;

BEGINhtp.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

Page 38: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

図図図図 3-6 複数の値の例で生成されるページ複数の値の例で生成されるページ複数の値の例で生成されるページ複数の値の例で生成されるページ

柔軟なパラメータの受渡し柔軟なパラメータの受渡し柔軟なパラメータの受渡し柔軟なパラメータの受渡しユーザーは、任意の数のエレメントを選択可能な HTMLフォームを作成できます。これらのエレメントの名前が異なる場合、可能な組合せを処理するためにオーバーロードされたプロシージャを作成する必要があります。あるいは、かわりに隠しフォーム・エレメントを挿入すると、ユーザーが選択するエレメントに関係なく、問合せ文字列の名前を毎回一貫させることが可能です。

Oracle Application Server 4.0では、問合せ文字列中の名前に一致するプロシージャが存在しない場合に PL/SQLカートリッジが実行するプロシージャを定義することにより、これが簡単になりました。プロシージャには、問合せ文字列中の名前と値のペアすべてが渡されます。シグネチャは、次のとおりです。

proc_name(num_entries IN NUMBER,name_array IN OWA.vc_arr,value_array IN OWA.vc_arr,reserved IN OWA.vc_arr)

詳細は次のとおりです。

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

num_entriesは、問合せ文字列の名前と値のペアの数を指定します。

name_arrayは、問合せ文字列の名前を指定します。

value_arrayは、問合せ文字列の値を指定します。

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

注意注意注意注意 : OCIでは、VARCHAR2の大きさに 2000バイトという制限があります。アプリケーション開発時には、この制限を考慮してください。

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

Page 39: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

位置パラメータ

このプロシージャが未定義で、問合せ文字列中の名前がいずれのプロシージャにも一致しない場合は、エラー・メッセージが表示されます。

次に、問合せ文字列の名前と値のペアを出力するプロシージャの例を示します。

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)

ISBEGIN

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_entriesLOOP

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

Page 40: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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ページ)は、この位置パラメータの機能では動作しません。パラメータの数が一致しない、またはプロシージャがない場合は、一般的なエラー・メッセージが表示されますが、これはエラーを正確に指摘するものではありません。

SQLSQLSQLSQLファイルの実行ファイルの実行ファイルの実行ファイルの実行データベースに格納されている 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アプリケーション開発者ガイド

Page 41: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

SQLファイルの実行

ファイルは、データベースではなくカートリッジに格納されているため、owa_util.showsourceを使用して .sqlファイルの PL/SQL文を表示できない点に注意してください。

PL/SQLPL/SQLPL/SQLPL/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カートリッジを使用してファイル・システムから SQLファイルを実行する場合、SQLファイルの最後に "/"を付けることはできません。ファイルの最後に "/"が付いている場合、PL/SQLカートリッジは、指定のファイルを実行できなくなります。

PL/SQLアプリケーションの追加と実行 3-19

Page 42: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLカートリッジのライフ・サイクル

htp.print('This is from file' || owa_util.get_cgi_env('PATH_TRANSLATED') );htp.bodyClose;htp.htmlClose;

end;

配列は、バインド変数としてサポートされないため、PL/SQLファイルで配列をバインドすることはできません。

PL/SQLPL/SQLPL/SQLPL/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アプリケーション開発者ガイド

Page 43: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLカートリッジのライフ・サイクル

実行実行実行実行authorizeコールバック関数が成功すると、次に execコールバック関数がコールされます。exec関数は次の処理を行います。

� CGI環境変数の値を取得する。

� 実行する PL/SQLプロシージャを決定する。

� プロシージャのパラメータを決定する。

� 変数をバインドする PL/SQLスクリプトを作成して、これを実行する。このスクリプトはプロシージャを実行し、WRB経由でクライアントに出力を書き出します。

シャットダウンシャットダウンシャットダウンシャットダウンshutdownコールバック関数は、WRBによって自動的にコールされます。これにより、オープンしている接続はすべてクローズされます。

PL/SQLアプリケーションの追加と実行 3-21

Page 44: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLカートリッジのライフ・サイクル

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

Page 45: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQL Web Toolkitの

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カートリッジによってアクセスされるスキーマごとにパッケージをロードする必要

使用 4-1

Page 46: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQL Web Toolkitのインストール

がありました。Oracle Application Server 4.0では、共通スキーマ "oas_public"にパッケージをロードし、ユーザーがこの共通スキーマのオブジェクトを実行できるように、パブリック・シノニムが使用されます。ユーザーは、共通スキーマの権限ではなく、自分の権限を使用して共通スキーマのオブジェクトを実行します。

図図図図 4-1 PL/SQL Web Toolkitの共通スキーマの共通スキーマの共通スキーマの共通スキーマ

Oracle Web Application Server 3.0からアップグレードする場合は、各スキーマから Oracle Web Application Server 3.0のパッケージを削除する必要があります。Oracle Application Server 4.0のパッケージは、共通スキーマに自動的にインストールされます。

PL/SQL Web ToolkitPL/SQL Web ToolkitPL/SQL Web ToolkitPL/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ユーティリティ」をクリックして、「ユーティリティ」ナビゲーション・ツリーを表示します。

3.0 4.0

ユーザー・パッケージ

PL/SQL Toolkit

SYSパッケージ

ユーザー・スキーマ

oas_public

SYSスキーマ

共通スキーマ

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

Page 47: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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をインストールするスクリプトを実行するために使用するログイン。

� 「適用」をクリックします。

図図図図 4-2 PL/SQL Web Toolkitの「インストール」フォームの「インストール」フォームの「インストール」フォームの「インストール」フォーム

6. ウィンドウに、インストールの進行状況が表示されます。 インストールが完了したら、ウィンドウの「OK」をクリックします。

注意注意注意注意 : PL/SQL Web Toolkitをインストールするには、DBAユーザーでSYSを使用する必要があります。他のユーザー(SYSTEMユーザーを含む)でログインすると、sys.dbms_sys_sqlプロシージャの実行権限をoas_publicに付与できないため、正常に動作しません。

+

PL/SQL Web Toolkitの使用 4-3

Page 48: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQL Web Toolkitのパッケージ

PL/SQL Web ToolkitPL/SQL Web ToolkitPL/SQL Web ToolkitPL/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アプリケーション開発者ガイド

Page 49: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQL Web Toolkitのパッケージ

htphtphtphtpとととと htfhtfhtfhtfhtpパッケージと htfパッケージには、ストアド・プロシージャから HTMLタグを生成できるサブプログラムが含まれています。たとえば、次のコマンドを実行すると、簡単なHTMLドキュメントが生成されます。

create or replace procedure hello ASBEGIN htp.htmlopen; -- generates <HTML> htp.headopen; -- generates <HEAD> htp.title('Hello'); -- generates <TITLE>Hello</TITLE> htp.headclose; -- generates </HEAD> htp.bodyopen; -- generates <BODY> htp.header(1, 'Hello'); -- generates <H1>Hello</H1> htp.bodyclose; -- generates </BODY> htp.htmlclose; -- generates </HTML>END;/

また、これらのパッケージには出力プロシージャ(htp.printなど)が存在し、引数を現行ドキュメントに書き出すことができます。これらの出力プロシージャを使用すると、標準以外の HTMLの生成やファンクションの戻り値を表示したり、あるいは HTMLドキュメントにそのまま表示されるハードコードされたテキストを渡すことができます。生成されたテキストは PL/SQLカートリッジに渡され、その後、ユーザーのブラウザに送信されます。

owa_cookie HTTPの Cookieの送信およびクライアントのブラウザからの取得を行うサブプログラムが含まれています。Cookieは、HTTPコール間の状態を管理するためにブラウザに送信される不透過の文字列です。このステータスは、クライアントのセッションが確立されている間のみ、または有効期限が指定されている場合は有効期限まで維持されます。システム日付は、owa_customパッケージに指定されている情報を参照して計算されます。

owa_opt_lock 更新情報の消失を防ぐために、データベースに簡単なロック機構を付加するサブプログラムが含まれています。ユーザーが行を選択して更新しようとしている間に別のユーザーがその値を変更した場合、更新情報が消失する可能性があります。

owa_custom authorizeファンクション(5-4ページの「カスタム認証」を参照)と、Cookieが使用するタイムゾーン定数が含まれています。

owa_content コンテンツ・サービス・リポジトリを検索してドキュメントのプロパティを処理できるサブプログラムが含まれています。このパッケージを使用する場合、ユーザーはこのパッケージ上での実行権限が必要です。この権限は、sysユーザーで付与できます。

表表表表 4-1 PL/SQL Web Toolkitのパッケージのパッケージのパッケージのパッケージ(続き)(続き)(続き)(続き)

パッケージパッケージパッケージパッケージ 説明説明説明説明

PL/SQL Web Toolkitの使用 4-5

Page 50: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQL Web Toolkitのパッケージ

owa_imageowa_imageowa_imageowa_imageowa_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_lockowa_opt_lockowa_opt_lockowa_opt_lockowa_opt_lockパッケージには、更新情報の消失を防ぐために、データベースに簡単なロック機構を付加するサブプログラムが含まれています。ユーザーが行を選択して更新しようとしている間に別のユーザーがその値を変更した場合、更新情報が消失する可能性があります。

HTTPは状態を保持しないプロトコルであるため、PL/SQLカートリッジは、従来型のデータベースのロック構造を使用できません。owa_opt_lockパッケージでは、次の 2つの方法でこの更新情報の消失の問題を回避できます。

� 隠しフィールドを使用する場合、HTMLページの隠しフィールドに以前の値を保管します。ユーザーが更新を要求すると、カートリッジはデータベースの現在の状態と保管した値が一致するかどうかをチェックします。更新処理は、値が一致した場合にのみ実行されます。この方法を使用するには、owa_opt_lock.store_valuesプロシージャをコールします。

� チェックサムを使用する場合、値そのものを保管するのではなく、チェックサムを保管します。この方法を使用するには、owa_opt_lock.checksumファンクションをコールします。

これらの方法は、"楽観的 "です。つまり、他のユーザーが更新できないようにするのではなく、更新の割込みが発生した場合に現行の更新を無効にします。

owa_customowa_customowa_customowa_customこれは、Oracle Application Server 4.0の新機能です。

owa_customパッケージには、authorizeファンクション(5-4ページの「カスタム認証」を参照)と、Cookieが使用するタイムゾーン定数が含まれています。Cookieはグリニッジ標準時(GMT)で定義された有効期限を使用します。GMTを使用していない場合は、この 2つの定数のうちのいずれかを使用して自分用のタイムゾーンを設定できます。

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

Page 51: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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_contentowa_contentowa_contentowa_contentowa_contentパッケージには、コンテンツ・サービス・リポジトリを問い合わせ、ドキュメント・プロパティを操作するためのファンクションとプロシージャが含まれています。このパッケージは、次のような作業に使用できます。

� ドキュメントの記述を設定する。

� ドキュメントを削除する。

� ドキュメントの属性を削除する。

� 属性情報を取り出す。

� ドキュメントの属性をリストする。

� ドキュメントのコンテンツ・タイプを取り出す。

owa_contentパッケージを使用する PL/SQLプロシージャとパッケージをコンパイルする場合、次のエラー・メッセージが表示される場合があります。

PLS-00201identifier '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

Page 52: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQL Web Toolkitのパラメータ名の表記規則

PL/SQLサンプルでは、OWA_CONTENTパッケージを使用するため、これらのステップは、PL/SQLサンプルをインストールする前に実行する必要があります。

PL/SQL Web ToolkitPL/SQL Web ToolkitPL/SQL Web ToolkitPL/SQL Web Toolkitのパラメータ名の表記規則のパラメータ名の表記規則のパラメータ名の表記規則のパラメータ名の表記規則PL/SQL Web Toolkitでは、パラメータの最初の文字がパラメータのデータ型を示します。

HTMLHTMLHTMLHTMLタグの属性タグの属性タグの属性タグの属性多くの 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/SQLPL/SQLPL/SQLPL/SQLカートリッジとアプレットカートリッジとアプレットカートリッジとアプレットカートリッジとアプレットHTMLファイルで APPLETタグを使用してアプレットを参照する場合、サーバーはそのHTMLファイルの入っているディレクトリで、そのアプレットのクラス・ファイルを探します。そのアプレットのクラス・ファイルが別のディレクトリに存在する場合は、APPLETタグの CODEBASE属性を使用してそのディレクトリを指定します。

PL/SQLカートリッジから HTMLページを生成し、その HTMLページがアプレットを参照する場合は、CODEBASE属性を指定する必要があります。これは、カートリッジには現行

表表表表 4-2 PL/SQL Web Toolkitのパラメータ名のパラメータ名のパラメータ名のパラメータ名

最初の文字最初の文字最初の文字最初の文字 データ型データ型データ型データ型 例例例例

c VARCHAR2 cname IN VARCHAR2

n INTEGER nsize IN INTEGER

d DATE dbuf IN DATE

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

Page 53: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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ファイルが存在する仮想パスを示します。

セッションとセッションとセッションとセッションと CookieCookieCookieCookieWeb 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"行を生成します。

LONGLONGLONGLONGデータ型データ型データ型データ型htp.print、htp.prn、htp.prints、htp.psまたは owa_util.cellsprintなどのプロシージャやファンクションで LONGデータ型の値を使用する場合、LONGデータの最初の 64KBのみ使用される点に注意してください。このような制約は、プロシージャやファンクションで LONGデータが varchar2データ型にバインドされているために発生しています。

注意注意注意注意 : HTTPヘッダーは、すべて英語でなければなりません。ヘッダーをデータベースから生成する場合は、英語で作成されていることを確認してください。

PL/SQL Web Toolkitの使用 4-9

Page 54: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

Inter-Cartridge Exchange(ICX)

Inter-Cartridge ExchangeInter-Cartridge ExchangeInter-Cartridge ExchangeInter-Cartridge Exchange((((ICXICXICXICX))))Oracleデータベースのバージョン 7.3.3以降を実行している場合、ICXを使用してプロシージャの中から他のカートリッジをコールすることが可能です。ICXを使用すると、カートリッジは HTTPリクエストを作成することによって他のカートリッジと通信できるようになります。コールを行ったカートリッジ(この場合はプロシージャ)は、ICXコールからのレスポンスを受信すると処理を継続できます。

ストアド・プロシージャからカートリッジをコールするには、utl_httpパッケージを使用します。このパッケージの詳細は、Oracleデータベースのドキュメントを参照してください。リリース 7.3.3では、この情報は "readme"ファイルに入っています。 リリース 8.xでは、この情報は『アプリケーション開発者ガイド』に入っています。

htphtphtphtpパッケージとパッケージとパッケージとパッケージと htfhtfhtfhtfパッケージの拡張パッケージの拡張パッケージの拡張パッケージの拡張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アプリケーション開発者ガイド

Page 55: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

end;end;/

これにより、上のプロシージャとファンクションを自分のプロシージャの中で使用できるようになりました。

create procedure nonstandard asbegin 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と互換性がある圧縮フォーマットでデータベースに保管できます。

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

� enctype属性に "multipart/form-data"が設定され、action属性が PL/SQLカートリッジのファンクション・コールに関連付けられている FORMタグ。

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

ユーザーが「Submit Query」ボタンをクリックしてフォーム・アクションをトリガーすると、次のイベントが発生します。

注意注意注意注意 : Oracle Application Serverに付属の Oracle Web Listenerを使用している場合、転送できるバイト数には 8MBの上限があります。

PL/SQL Web Toolkitの使用 4-11

Page 56: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

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アプリケーション開発者ガイド

Page 57: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

<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) asbegin 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

Page 58: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

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

このストアド・プロシージャには、"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に設定されます。

ダウンロードダウンロードダウンロードダウンロードデータベースにファイルをアップロードすると、ファイルのダウンロード、データベースからの削除および属性の読込みと書込みが可能になります。

ファイルをデータベースからユーザーのマシンにダウンロードするには、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」ボタンが表示されます。

注意注意注意注意 : ファイルのフルパス名の長さには、426文字までという制限があります。 この例では、フルパス名をmyfile変数に格納しています。

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

Page 59: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

図図図図 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

Page 60: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

文字列のマッチングと操作

<p><INPUT type="submit" value="Download">

</FORM></body>

</HTML>

「Download」ボタンに関連付けられているアクションにより、選択したファイルをダウンロードする downloadというストアド・プロシージャが実行されます。

downloadプロシージャのコードは次のとおりです。

create procedure download (filex in varchar2) asbegin 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アプリケーション開発者ガイド

Page 61: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

文字列のマッチングと操作

このファンクションは正規表現が見つかった場合にその文字列の終了位置を返します。正規表現が見つからなかった場合は、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.matchowa_pattern.matchowa_pattern.matchowa_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

Page 62: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

文字列のマッチングと操作

owa_pattern.changeowa_pattern.changeowa_pattern.changeowa_pattern.changeowa_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アプリケーション開発者ガイド

Page 63: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

認証とセキュリ

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

Page 64: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

動的ユーザー名 /パスワードおよび 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_OracleBasic_OracleBasic_OracleBasic_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/SQLPL/SQLPL/SQLPL/SQLカートリッジおよび認証サーバー方式カートリッジおよび認証サーバー方式カートリッジおよび認証サーバー方式カートリッジおよび認証サーバー方式認証サーバー方式(基本、ダイジェスト、IPベースの制限またはドメイン・ベースの制限など)を使用して、PL/SQLカートリッジを実行する仮想パスを保護できます。基本方式とダイジェスト方式では、ユーザーがユーザー名とパスワードを入力する必要があります。一方、IPとドメイン方式では、ユーザーの IPアドレスおよびドメイン名に基づいて、ユーザーを許可したり制限できます。

仮想パスを方式に関連付けるには、Oracle Application Server Managerの各カートリッジの「仮想パス」ページを使用します。(Oracle Application Server Managerの「Webセキュリティ」ページを使用して、ユーザー名、グループ名およびレルムを方式に追加します。)

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

Page 65: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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 仮想パスを保護する場合の大文字・小文字の区別の説明仮想パスを保護する場合の大文字・小文字の区別の説明仮想パスを保護する場合の大文字・小文字の区別の説明仮想パスを保護する場合の大文字・小文字の区別の説明

� 仮想パスで一部のプロシージャのみ保護する必要がある場合は、PER_PACKAGEオプションを付けてカスタム認証を使用します。カスタム認証の詳細は、次の項を参照してください。

仮想パス /myApp/hr/salary_usa

大文字・小文字を区別

PL/SQLプロシージャ名

大文字・小文字の区別なし

PL/SQLカートリッジに関連付けられたパス

認証とセキュリティ 5-3

Page 66: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

カスタム認証

カスタム認証カスタム認証カスタム認証カスタム認証カスタム認証は、アプリケーション自身(つまり、そのアプリケーション内で)のアクセスをコントロールするアプリケーションに適しています。アプリケーションはデータベース・レベルではなく、アプリケーション・レベルでユーザーの認証を行います。

カスタム認証には設定ファイルに保管される静的なユーザー名 /パスワードが必要で、動的なユーザー名 /パスワード認証と組み合せて使用することはできません。

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アプリケーション開発者ガイド

Page 67: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

カスタム認証

"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に、パラメータの値のサマリーを示します。

カスタム認証を使用する場合は、owa_secパッケージのサブプログラムを使用できます。カスタム認証を使用しない場合は、owa_secを使用しないでください。

表表表表 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

認証とセキュリティ 5-5

Page 68: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

カスタム認証

OWA_SEC.GLOBALOWA_SEC.GLOBALOWA_SEC.GLOBALOWA_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 isip_address owa_util.ip_address;

begin-- prompt the user for login and passwordowa_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)) thenreturn TRUE;

elsereturn FALSE;

end if;end;

begin -- OWA_CUSTOMowa_sec.set_authorization(OWA_SEC.GLOBAL);

end;

OWA_SEC.PER_PACKAGEOWA_SEC.PER_PACKAGEOWA_SEC.PER_PACKAGEOWA_SEC.PER_PACKAGEリクエストがパッケージ内のプロシージャを指定すると、そのパッケージ内の authorizeファンクションが実行されます。プロシージャがパッケージ内に存在しない場合、無名のauthorizeファンクションがコールされます。

たとえば、ユーザーが foo.print_pageというプロシージャを実行すると、ユーザー認証を行うために foo.authorizeファンクションがコールされます。

create or replace package foo isprocedure print_page;function authorize return boolean;

end;

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

Page 69: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

カスタム認証

create or replace package body foo isprocedure print_page isbegin

htp.print('Hello World');end;

function authorize return boolean isbegin

owa_sec.set_protection_realm('vendors');if ((owa_sec.get_user_id = 'guest') and

(owa_sec.get_password = 'welcome') thenreturn TRUE;

elsereturn 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_CUSTOMowa_sec.set_authorization(OWA_SEC.PER_PACKAGE);end;

OWA_SEC.CUSTOMOWA_SEC.CUSTOMOWA_SEC.CUSTOMOWA_SEC.CUSTOMPL/SQLカートリッジが実行されるたびに、ユーザーのスキーマ内のowa_custom.authorizeファンクションがコールされます。これにより、各ユーザーごとに異なる認証ファンクションをインプリメントできます。ユーザーのスキーマにowa_custom.authorizeファンクションが存在しない場合、PL/SQLカートリッジは"oas_public"スキーマ内でそのファンクションを探します。

認証とセキュリティ 5-7

Page 70: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

カスタム認証

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

Page 71: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

トランザクシ

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

Page 72: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

トランザクション・サービスのメカニズム

トランザクション・サービスのメカニズムトランザクション・サービスのメカニズムトランザクション・サービスのメカニズムトランザクション・サービスのメカニズムトランザクション・サービスを使用して、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 transactionhttp://host:port/myApp/cart1/test.txn_begin

-- the first operation in the transactionhttp://host:port/myApp/cart1/test.txn_update1

-- the second operation in the transactionhttp://host:port/myApp/cart1/test.txn_update2

-- some more operations

-- commit the transactionhttp://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アプリケーション開発者ガイド

Page 73: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

コミット・トランザクションまたはロールバック・トランザクションの前にエラーが発生した場合は、ロールバック・トランザクションに関連付けられている 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プロシージャが実行されます。

注意注意注意注意 : トランザクションに対応するプロシージャ(トランザクション内のプロシージャを含む)では、トランザクションをコミットまたはロールバックする PL/SQL文をコールしないでください。コールすると、トランザクション・サービス・モデルを使用できなくなります。

トランザクション 6-3

Page 74: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

Page 75: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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

レコードはサポートしていません。

NLSNLSNLSNLSの拡張機能の拡張機能の拡張機能の拡張機能NLSの拡張機能は DADの設定の一部であり、様々な言語 /フォーマットの値を Oracleデータベースに要求したり、Oracleデータベースから取得するための柔軟なインフラストラクチャを提供します。データベースが他の NLS設定を使用して設定されている場合でも、データベースおよび PL/SQLカートリッジによってすべての変換が暗黙的に処理されます。

たとえば、NLS通貨に USドルが設定されているデータベースがあり、ユーザーに日本円の単位記号で値を表示する場合、NLS通貨を日本円に設定するだけで済みます。データがデータベースから取り出されると、このデータは日本円の単位記号で表示されます。

その他 7-1

Page 76: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

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アプリケーション開発者ガイド

Page 77: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

Oracle Web Application Server 3.xから Oracle Application Server 4.0への PL/SQLカートリッジのアップグレード

Oracle Web Application Server 3.xOracle Web Application Server 3.xOracle Web Application Server 3.xOracle Web Application Server 3.xからからからから Oracle Application Server 4.0Oracle Application Server 4.0Oracle Application Server 4.0Oracle Application Server 4.0へのへのへのへのPL/SQLPL/SQLPL/SQLPL/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

Page 78: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

Oracle Web Application Server 3.xから Oracle Application Server 4.0への PL/SQLカートリッジのアップグレード

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

Page 79: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

トラブルシューテ

8

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

内容内容内容内容� PL/SQLアプリケーションの実行に関する問題

� データベースから生成されたエラー・メッセージの表示

� 未処理例外

� PL/SQLアプリケーションから生成された HTMLの表示

� トレース・レベル

� エラー・レポート・レベル

PL/SQLPL/SQLPL/SQLPL/SQLアプリケーションの実行に関する問題アプリケーションの実行に関する問題アプリケーションの実行に関する問題アプリケーションの実行に関する問題PL/SQLアプリケーションを実行できない場合には、次の事項を確認してください。

� PL/SQLカートリッジがWRBに登録されているか、およびアプリケーションの仮想パスが PL/SQLカートリッジにマッピングされているかどうかをチェックします。

� WebリスナーとWRBが正しく機能しているかどうか確認します。たとえば、他の PL/SQLアプリケーションやカートリッジを実行できるかどうかをチェックします。サンプルの PL/SQLアプリケーションを実行してみることもお薦めします。

� URLが参照している PL/SQLサブプログラムがファンクションでなく、プロシージャであることを確認します。

ィング 8-1

Page 80: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

データベースから生成されたエラー・メッセージの表示

データベースから生成されたエラー・メッセージの表示データベースから生成されたエラー・メッセージの表示データベースから生成されたエラー・メッセージの表示データベースから生成されたエラー・メッセージの表示PL/SQLカートリッジのエラー・レポート・レベルを最大値(2)に設定すると、ユーザーに返されるデータベースのエラー・メッセージを表示できます。その他のエラー・レベルの詳細は、8-5ページの「エラー・レポート・レベル」を参照してください。

PL/SQLカートリッジのロギングをオンにすると、データベース・メッセージのログが、指定したログ・ファイル(wrb.log)に記録されます。カートリッジのロギングをオンにするには、「アプリケーション」の「設定」の「ロギング」ページに移動して、PL/SQLカートリッジのロギングが使用可能になっていることをチェックします。また、ロギング・レベルもチェックします。ロギング・レベルを上げると、より多くのメッセージを取得できます。詳細は、8-4ページの「トレース・レベル」を参照してください。

未処理例外未処理例外未処理例外未処理例外PL/SQLプロシージャでエラーが発生すると、例外が返されます。例外を処理しない場合、エラーは Oracleエラー・スタックとともにログ・ファイルに出力され、ユーザーにエラー・メッセージが返されます。エラー・レポート・レベルは、ユーザーへのエラー表示を制御します。その他のエラー・レベルの詳細は、8-5ページの「エラー・レポート・レベル」を参照してください。

未処理例外でプロシージャが終了すると、PL/SQLは OUTパラメータに値を設定せず、プロシージャが行ったデータベース処理をコミットしない点に注意してください。

プロシージャのトップ・レベルに OTHERSハンドラをコーディングすると、未処理例外を回避できます。

PL/SQLPL/SQLPL/SQLPL/SQLアプリケーションから生成されたアプリケーションから生成されたアプリケーションから生成されたアプリケーションから生成された HTMLHTMLHTMLHTMLの表示の表示の表示の表示PL/SQL Web Toolkitには owa_util.showpageプロシージャが含まれており、Oracle Server Managerでこれを使用してアプリケーションの実行結果を出力できます。 次の例では、current_usersプロシージャ(第 2章「チュートリアル」で説明)から生成されたHTMLを出力します。

% svrmgrlOracle Server Manager Release 2.3.2.0.0 - ProductionCopyright (c) Oracle Corporation 1994, 1995. All rights reserved.Oracle7 Server Release 7.3.2.1.0 - Production ReleaseWith the distributed optionPL/SQL Release 2.3.2.0.0 - ProductionSVRMGR> connect scott/tigerConnected.SVRMGR> set serveroutput onServer Output ONSVRMGR> execute current_usersStatement processed.

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

Page 81: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

PL/SQLアプリケーションから生成された HTMLの表示

SVRMGR> execute owa_util.showpageStatement 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

Page 82: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

トレース・レベル

トレース・レベルトレース・レベルトレース・レベルトレース・レベルトレース・レベルを上げることにより、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アプリケーション開発者ガイド

Page 83: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

エラー・レポート・レベル

エラー・レポート・レベルエラー・レポート・レベルエラー・レポート・レベルエラー・レポート・レベルPL/SQLカートリッジは、3つのレベルのエラー・レポートをサポートします。これらのレベルは、エラー発生時のユーザーへのエラー表示を制御します。Oracle Web Application Server 3.0より前のバージョンでは、エラー発生時に PL/SQLカートリッジが静的ファイルを表示し、ブラウザではそのエラーを表示できませんでした。

エラー・レベルは、PL/SQLカートリッジの一部として設定されます。エラーは execコールバック関数の実行中のみレポートされます。

デバッグ(変数のロギングなど)

13 変数のデバッグを出力する場合は 13。

14 (ユーザー定義)

15 (ユーザー定義)

表表表表 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-1 詳細レベル詳細レベル詳細レベル詳細レベル

意味意味意味意味詳細詳細詳細詳細レベルレベルレベルレベル 推奨する使用方法推奨する使用方法推奨する使用方法推奨する使用方法

トラブルシューティング 8-5

Page 84: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

エラー・レポート・レベル

2 エラー発生の日時、URL、カートリッジ名、コールされたプロシージャ、パラメータ名と値、Webサーバーのエラー・コードおよびコール・スタック付きのデータベース・エラーなど、詳細な情報が表示されます。通常、このエラー・レベルはアプリケーションの開発やデバッグ中にのみ使用されます。

例 :

Error occurred at Mon Jan 6 16:33:32 1997OWS-05101: Agent: exexution failed due to Oracle error 6564ORA-06564: object show_stats does not existORA-06512: at "SYS.DBMS_DESCRIBE", line 55ORA-06512: at line 1OWA SERVICE: OWA_DEFAULT_SERVICEPROCEDURE: show_stats

表表表表 8-2 エラー・レポート・レベルエラー・レポート・レベルエラー・レポート・レベルエラー・レポート・レベル

エラー・レベルエラー・レベルエラー・レベルエラー・レベル 説明説明説明説明

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

Page 85: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

索引索引索引索引

数字数字数字数字4.0における相違点トランザクション・サービス,6-1

BBasic_Oracleセキュリティ方式

PL/SQLカートリッジ,5-2

CCookie

PL/SQL Web Toolkit,4-9PL/SQLカートリッジ,4-5,4-9

DDAD

Database Access Descriptor(DAD)を参照Database Access Descriptor(DAD),1-2作成,2-3,3-3ダイアログ・ボックス,2-4

Eexec関数レポートされるエラー,8-5

Ffoo.authorizeファンクション,5-6

HHTML

PL/SQLアプリケーションから生成される,8-2拡張,4-10

HTMLエレメント属性,4-8

IICXサービス

PL/SQLカートリッジ,4-10

LLONGデータ型,4-9

NNLS

PL/SQLカートリッジの拡張,7-1NLSの拡張機能,7-1

Ooas_publicスキーマ,4-2ORACLE_HOMEディレクトリ,2-2ORACLE_SIDフィールド,2-4Oracleデータベース・ファイル,2-2owa_custom.authorizeファンクション,5-4owa_pattern.changeファンクションまたはプロシー

ジャ,4-18owa_pattern.matchファンクション,4-17OWA_SEC.CUSTOM変数,5-7OWA_SEC.GLOBAL変数,5-6

索引索引索引索引 -1

Page 86: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

OWA_SEC.PER_PACKAGE変数,5-6owa_sec.set_authorizationプロシージャ,5-4owa_util.showpageプロシージャ,8-2owains.sql,4-2

PPL/SQL Agent~とリスナーのポート番号,3-11

PL/SQL Web ToolkitHTMLタグの属性,4-8ICX,4-10PL/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-9DAD,1-2DADの作成,2-3LONGデータ型 , と,4-9NLSの拡張機能,7-1PL/SQL Web Toolkitの使用,4-1PL/SQLカートリッジを実行する URL,1-1SQLファイルの実行,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

動的なユーザー名 /パスワード認証,5-1トラブルシューティング,8-1トランザクション,6-1例,6-3

トレース・レベル,8-4認証とセキュリティ,5-1パッケージ

htfパッケージ,4-4htp,4-4htpパッケージと htfパッケージの拡張,4-10owa,4-4owa_content,4-5owa_cookie,4-5owa_custom,4-5owa_image,4-4,4-6owa_init,7-3owa_opt_lock,4-5owa_pattern,4-4owa_sec,4-4,5-5owa_text,4-4owa_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-12PL/SQL配列~とオーバーロード,3-12

「PL/SQLパラメータ」フォーム,3-8privcust.sqlファイル,5-4

SSQLファイル実行,3-18

索引索引索引索引 -2

Page 87: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

UURLトランザクション・サービス,6-2

ああああアップグレード

PL/SQLカートリッジ,7-3アップロード・フォーム,4-12アプリケーション

PL/SQLカートリッジ , 追加,3-2

ええええエラー・メッセージデータベースから生成される,8-2

かかかか概要

PL/SQLカートリッジ,1-1確保されているキーワード,1-5カスタム認証

PL/SQLカートリッジ,5-4,5-5値,5-5使用可能,5-4

仮想パスPL/SQLカートリッジ,3-3保護,5-3

ききききキーワード , 確保されている~,1-5

ここここコールバック関数認証ファンクション,5-4

しししし実行,3-21シャットダウン,3-21詳細レベル

PL/SQLカートリッジ,8-4初期化,3-20

すすすすストアド・プロシージャ

URLで実行,6-2作成,2-2

せせせせセキュリティ

PL/SQLカートリッジ,5-1認証サーバー方式,5-2

セッションPL/SQL Web Toolkit,4-9

たたたたダウンロード・フォーム,4-15

ちちちちチュートリアル

PL/SQLカートリッジ,2-1

とととと動的ユーザー名 /パスワード・セキュリティ方式

PL/SQLカートリッジ,5-2トラブルシューティング

PL/SQLカートリッジ,8-1トランザクション・サービス

PL/SQLカートリッジ,6-1例,6-3

トレース・レベルPL/SQLカートリッジ,8-4

にににに認証,3-20

PL/SQLカートリッジ,5-1,5-4認証 , カスタム

PL/SQLカートリッジ,5-5認証サーバー・セキュリティ方式,5-2authorizeファンクション

PL/SQLカートリッジ,5-4

索引索引索引索引 -3

Page 88: Oracle Application Serverotndnld.oracle.co.jp/document/products/app_server/oas/...Oracle Application Server PL/SQL アプリケーション開発者ガイド, リリース4.0.8.2 部品番号:

ははははパッケージ

htfパッケージ,4-4htpパッケージ,4-4PL/SQLカートリッジ

owa_contentパッケージ,4-5owa_cookieパッケージ,4-5owa_customパッケージ,4-5owa_imageパッケージ,4-4,4-6owa_initパッケージ,7-3owa_opt_lockパッケージ,4-5owa_pattern,4-4owa_secパッケージ,4-4owa_textパッケージ,4-4owa_utilパッケージ,4-4owaパッケージ,4-4インストール,2-3htpパッケージと htfパッケージの拡張,4-10

パラメータNLSの拡張機能,7-2

ふふふふファイル privcust.sql,5-4ファンクション

authorize,5-4foo.authorize,5-6owa_custom.authorize,5-4

物理パスPL/SQLカートリッジ,3-3PL/SQLソース・ファイルの~,3-19

プロシージャのオーバーロードPL/SQLカートリッジ,3-11

ほほほほ保護

PL/SQLカートリッジ,5-1

みみみみ未処理例外,8-2

もももも文字列

PL/SQLカートリッジでのマッチングと操作,4-16

りりりりリスナーのポート番号~と PL/SQL Agent,3-11

れれれれ例外 , 未処理,8-2

索引索引索引索引 -4