この章では、データベース・リンクの確立、コレクションの使用、バックグラウンドSQLの実行、Webサービスの使用、ユーザー設定項目の管理など、高度なプログラミング手法について説明します。
この章の内容は次のとおりです。
次の操作を実行すると、Oracle HTML DBアプリケーションから電子メールを送信できます。
アクティブなメール・キューに格納されているすべてのメール・メッセージを定期的に送信するように、バックグラウンド・ジョブを作成します。
PL/SQLパッケージHTMLDB_MAIL
をコールします。
このセクションの内容は次のとおりです。
Oracle HTML DBでは、未送信の電子メール・メッセージは、HTMLDB_MAIL_QUEUE
という表に格納されます。DBMS_JOB
バックグラウンド・プロセスは、Oracle HTML DBのインストール時に自動的に作成されます。バックグラウンド・プロセスは、15分ごとにメール・キューを送信します。バックグラウンド・プロセスによって実行されるパッケージには、次の2つのパラメータがあります。
p_smtp_host
: SMTPゲートウェイのホスト名です。デフォルト値は、localhost
です。
p_smtp_portno
: SMTPゲートウェイのポート番号です。デフォルト値は、25
です。
メールを送信するための最も有効な方法は、アクティブなメール・キューに格納されているすべてのメール・メッセージを定期的に送信するように、バックグラウンド・ジョブを作成(DBMS_JOB
パッケージを使用)することです。
HTMLDB_MAIL
というPL/SQLパッケージをコールすることによって、Oracle HTML DBアプリケーションから電子メールを送信できます。 このパッケージは、Oracleで提供されるUTL_SMTPパッケージをベースとして構築されています。 このような依存性があるため、HTMLDB_MAILを使用するには、UTL_SMTPパッケージがインストール済で機能している必要があります。
参照: 詳細は、『PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 |
HTMLDB_MAIL
には、電子メールを手動で送信するために、次の2つのプロシージャが含まれています。
HTMLDB_MAIL.SEND
プロシージャを使用すると、電子メール・メッセージを、アプリケーションから外部へ手動で送信できます。
HTMLDB_MAIL.PUSH_QUEUE
を使用すると、HTMLDB_MAIL_QUEUE
に格納されているメール・メッセージを配信できます。
Oracle HTML DBでは、未送信の電子メール・メッセージは、HTMLDB_MAIL_QUEUE
という表に格納されます。 プロシージャHTMLDB_MAIL.PUSH_QUEUE
をコールすることによって、このキューに格納されたメール・メッセージを指定したSMTPゲートウェイに配信できます。 このプロシージャには、2つのパラメータを入力する必要があります。
p_smtp_hostname
: SMTPゲートウェイのホスト名を定義します。
p_smtp_portno
: SMTPゲートウェイのポート番号を定義します(25など)。
Oracle HTML DBによって、正常に送信されたメッセージのログが、サーバーのローカル時間でのタイムスタンプとともにHTMLDB_MAIL_LOG
に作成されます。
次に、シェル・スクリプトを使用したHTMLDB_MAIL.PUSH_QUEUE
プロシージャの使用例を示します。この例は、UNIXまたはLinuxの使用環境にのみ適用されます。この例では、SMTPゲートウェイのホスト名はsmtp01.oracle.com
、SMTPゲートウェイのポート番号は25
として定義されています。
SQLPLUS / <<EOF FLOWS_010600.HTMLDB_MAIL.PUSH_QUEUE('smtp01.oracle.com','25'); DISCONNECT EXIT EOF
Oracle HTML DBはOracleデータベース上で実行されるため、ユーザーは、すべての分散データベース機能を使用できます。通常、分散データベース操作は、データベース・リンクを使用して実行します。
データベース・リンクを作成するには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「SQL Workshop」をクリックします。
「SQL Workshop」で、「オブジェクトを作成」を選択します。
「データベース・オブジェクトを作成」ウィザードが表示されます。
「データベース・リンク」を選択します。
画面に表示される手順に従います。
データベース・リンク名は、Oracleのネーミング規則に従う必要があり、空白を含めたり、数字やアンダースコアから開始することはできません。
参照: 『Oracle Database管理者ガイド』 |
コレクションを使用すると、1つ以上の非スカラー値を一時的に取得できます。コレクションを使用して、現在セッション・ステートにある行および列を格納します。これによって、あるユーザーの特定のセッション中にそれらの行および列に対してアクセス、操作または処理を行うことができます。コレクションは、バケツのようなものと考えることができます。その中に情報の行を一時的に格納し、その情報を指定できます。
コレクションを使用する場合の例を次に示します。
データ入力ウィザードを作成しており、そのウィザードで、まず論理トランザクション中に複数行の情報を収集する必要がある場合。物理トランザクションと論理トランザクションの両方の完了時、ウィザードの最終手順を実行する前に、コレクションを使用して、複数行の情報のコンテンツを一時的に格納できます。
アプリケーションに、ユーザーが1つのページで複数の詳細行を更新する更新ページが含まれている場合。ユーザーは、複数の更新を行い、それらの更新をコレクションに適用した後、最終プロセスをコールしてそれらの変更をデータベースに適用できます。
任意の数の属性を収集するウィザードを構築している場合。コレクションに一時的に格納された情報が取得され、データベースに適用されるタスクをウィザードの最後にユーザーが実行するようにします。
このセクションの内容は次のとおりです。
各コレクションには、データ要素(メンバー)の名前付きリストが含まれます。このリストには、最大50個の属性(列)を含めることができます。PL/SQL API HTMLDB_COLLECTION
を使用して、コレクション情報を挿入、更新および削除します。
各コレクションには、データ要素(メンバー)の名前付きリストが含まれます。このリストには、最大50個の属性(列)を含めることができます。コレクションを作成するには、次のメソッドを使用します。
CREATE_COLLECTION
CREATE_OR_TRUNCATE_COLLECTION
CREATE_COLLECTION_FROM_QUERY
CREATE_COLLECTION
では、指定したコレクションがすでに存在する場合は例外が発生します。次に例を示します。
HTMLDB_COLLECTION.CREATE_COLLECTION( p_collection_name => collection name );
CREATE_OR_TRUNCATE_COLLECTION
では、指定したコレクションが存在しない場合に、新しいコレクションが作成されます。指定したコレクションが存在する場合は、そのコレクションが切り捨てられます。切り捨てられたコレクションは空になりますが、コレクション自体はそのまま残ります。次に例を示します。
HTMLDB_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION( p_collection_name => collection name ); p_generate_md5 => YES or NO );
CREATE_COLLECTION_FROM_QUERY
では、コレクションが作成され、指定した問合せの結果がそのコレクションに移入されます。次に例を示します。
HTMLDB_COLLECTION.CREATE_COLLECTION_FROM_QUERY( p_collection_name => collection name, p_query => your query ); p_generate_md5 => YES or NO );
また、CREATE_COLLECTION_FROM_QUERY_B
でも、コレクションが作成され、指定した問合せの結果がそのコレクションに移入されます。次に例を示します。
HTMLDB_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B( p_collection_name => collection name, p_query => your query );
CREATE_COLLECTION_FROM_QUERY_B
では、バルクSQL操作を実行することにより、CREATE_COLLECTION_FROM_QUERY
よりも非常に速いパフォーマンスが提供されますが、次の制限があります。
問合せの選択リスト内の列値は、2,000バイトを超えることはできません。列値が2,000バイトを超える行がある場合は、実行中にエラーが発生します。
コレクション内のいずれのメンバーに対してもMD5チェックサムは計算されません。
コレクションの切捨てでは、指定したコレクションからすべてのメンバーが削除されますが、そのコレクション自体はそのまま残ります。次に例を示します。
HTMLDB_COLLECTION.TRUNCATE_COLLECTION( p_collection_name => collection name );
コレクションの削除では、コレクションとそのすべてのメンバーが削除されます。自分でコレクションを削除しなくても、セッションの消去時にコレクションが削除されることに注意してください。次に例を示します。
HTMLDB_COLLECTION.DELETE_COLLECTION ( p_collection_name => collection name );
コレクションに追加したデータ要素(メンバー)には、一意の順序番号が割り当てられます。メンバーをコレクションに追加すると、最も新しいメンバーが一番大きい番号を持つように、前のメンバーより1大きい番号が新しいメンバーに割り当てられます。
コレクションに新しいメンバーを追加するには、ADD_MEMBER
ファンクションを使用します。このメソッドをコールすると、新しく追加したメンバーの順序番号が戻されます。次の例では、ADD_MEMBER
プロシージャを使用する方法を示します。
HTMLDB_COLLECTION.ADD_MEMBER( p_collection_name => collection name, p_c001 => [member attribute 1], p_c002 => [member attribute 2], p_c003 => [member attribute 3], p_c004 => [member attribute 4], p_c005 => [member attribute 5], p_c006 => [member attribute 6], p_c007 => [member attribute 7], ... p_c050 => [member attribute 50]); p_clob001 => [CLOB member attribute 1], p_generate_md5 => YES or NO);
次の例では、ADD_MEMBER
ファンクションを使用する方法を示します。このファンクションでは、新しく作成したメンバーに割り当てられた順序番号が戻されます。
l_id := HTMLDB_COLLECTION.ADD_MEMBER( p_collection_name => collection name, p_c001 => [member attribute 1], p_c002 => [member attribute 2], p_c003 => [member attribute 3], p_c004 => [member attribute 4], p_c005 => [member attribute 5], p_c006 => [member attribute 6], p_c007 => [member attribute 7], ... p_c050 => [member attribute 50]); p_clob001 => [CLOB member attribute 1], p_generate_md5 => YES or NO);
ADD_MEMBERS
メソッドを使用して、コレクションに新しいメンバー(またはメンバーの配列)を追加することもできます。このメソッドでは、指定した現行ユーザー名を持つコレクションが同じセッションに存在しない場合は、例外が発生します。また、4,000文字を超える属性は、4,000文字に切り捨てられます。追加されるメンバーの数は、1番目の配列内の要素数に基づきます。次に例を示します。
HTMLDB_COLLECTION.ADD_MEMBERS( p_collection_name => collection name, p_c001 => member attribute array 1, p_c002 => member attribute array 2, p_c003 => member attribute array 3, p_c004 => member attribute array 4, p_c005 => member attribute array 5, p_c006 => member attribute array 6, p_c007 => member attribute array 7, ... p_c050 => member attribute array 50); p_generate_md5 => YES or NO);
コレクション・メンバーを更新するには、UPDATE_MEMBER
をコールして、更新するコレクション・メンバーを順序番号を使用して参照します。このプロシージャによって、メンバーの個々の属性ではなく1つのコレクション・メンバー全体が置換されます。このプロシージャでは、指定したコレクションが存在しない場合は例外が発生します。次に例を示します。
HTMLDB_COLLECTION.UPDATE_MEMBER ( p_collection_name => collection name, p_seq => member sequence number, p_c001 => member attribute 1, p_c002 => member attribute 2, p_c003 => member attribute 3, p_c004 => member attribute 4, p_c005 => member attribute 5, p_c006 => member attribute 6, p_c007 => member attribute 7, ... p_c050 => member attribute 50); p_clob001 => [CLOB member attribute 1],
4,000文字を超えるコレクション・メンバー属性には、p_clob001
を使用します。
コレクション・メンバーの1つの属性を更新するには、UPDATE_MEMBER_ATTRIBUTE
を使用します。指定したコレクションが存在しない場合、このプロシージャをコールすると例外が発生します。次に例を示します。
HTMLDB_COLLECTION.UPDATE_MEMBER_ATTRIBUTE( p_collection_name => collection name, p_seq => member sequence number, p_c001 => member attribute 1, p_c002 => member attribute 2, p_c003 => member attribute 3, p_c004 => member attribute 4, p_c005 => member attribute 5, p_c006 => member attribute 6, p_c007 => member attribute 7, ... p_c050 => member attribute 50); p_clob_number => number of CLOB attribute to be updated, <-- Only valid value for now is 1 p_clob_value => new CLOB attribute value);
コレクション・メンバーを削除するには、DELETE_MEMBER
をコールして、削除するコレクション・メンバーを順序番号を使用して参照します。次に例を示します。
HTMLDB_COLLECTION.DELETE_MEMBER( p_collection_name => collection name, p_seq => member sequence number);
このプロシージャを使用すると、指定したコレクション内の順序番号が欠落することに注意してください。また、指定したコレクションが存在しない場合、このプロシージャをコールするとエラーが発生します。
属性が特定の値に一致するまで、コレクションからすべてのメンバーを削除することもできます。次に例を示します。
HTMLDB_COLLECTION.DELETE_MEMBERS( p_collection_name => collection name, p_attr_number => number of attribute used to match for the specified attribute value for deletion, p_attr_value => attribute value of the member attribute used to match for deletion);
このプロシージャを使用する場合も、指定したコレクション内の順序番号が欠落することに注意してください。また、このプロシージャでは、次の場合に例外が発生します。
指定したコレクションが存在しない場合
指定した属性番号が1から50の範囲外であるか、無効である場合
指定した属性値がNULLの場合、指定したコレクションのすべてのメンバーが削除されます。
p_generate_md5
パラメータは、コレクションの各メンバーに対してMD5メッセージ・ダイジェストを計算するかどうかを判別します。コレクションの作成直後、コレクション・ステータス・フラグはFALSE
に設定されます。コレクションに対して操作(追加、更新、切捨てなど)が行われると、このフラグはTRUE
に設定されます。
このフラグは、RESET_COLLECTION_CHANGED
をコールすることで、手動でリセットできます。次に例を示します。
HTMLDB_COLLECTION.RESET_COLLECTION_CHANGED ( p_collection_name => collection name)
このフラグをリセットした後にコレクションが変更されたかどうかを判別するには、COLLECTION_HAS_CHANGED
をコールします。次に例を示します。
l_changed := HTMLDB_COLLECTION.COLLECTION_HAS_CHANGED( p_collection_name => collection_name);
p_generated_md5
パラメータがYES
に設定されている場合、コレクションに新しいメンバーを追加すると、50個のすべての属性とCLOB属性に対してMD5メッセージ・ダイジェストが計算されます。この値はHTMLDB_COLLECTION
ビューのMD5_ORIGINAL列に存在し、GET_MEMBER_MD5
ファンクションを使用してアクセスできます。次に例を示します。
HTMLDB_COLLECTION.GET_MEMBER_MD5 ( p_collection_name => collection name, p_seq => member sequence number ); RETURN VARCHAR2;
コレクションのメンバーを、配列の集合として渡した値とマージできます。p_init_query
引数を使用することで、指定した問合せからコレクションを作成できます。次に例を示します。
HTMLDB_COLLECTION.MERGE_MEMBERS p_collection_name => collection_name
ただし、そのコレクションが存在する場合、次の操作が実行されることに注意してください。
コレクション(配列ではない)内の行が削除されます。
コレクションおよび配列内の行が更新されます。
配列内に存在し、コレクション内に存在しない行が挿入されます。
4,000文字を超える属性は、4,000文字に切り捨てられます。表15-1に、コレクションのマージに使用可能な引数を示します。
表15-1 コレクションのマージに使用可能な引数
引数 | 説明 |
---|---|
p_c001
|
マージされる1番目の属性値の配列です。最大長は4,000文字です。最大長より大きい値は4,000文字に切り捨てられます。
P_C001 PL/SQL表内の要素数は、すべてのPL/SQL表内のアイテムの合計数として使用されます。たとえば、P_C001.count = 2およびP_C002.count = 10の場合、2つのメンバーのみがマージされます。P_C001がNULLの場合は、アプリケーション・エラーが発生することに注意してください。 |
p_c0xx
|
マージされるXX 番目の属性値の属性です。最大長は4,000文字です。最大長より大きい値は4,000文字に切り捨てられます。
|
p_collection_name
|
コレクションの名前です。
参照: 「コレクションの名前の指定」 |
p_null_index
|
マージ・ファンクションで無視する行を識別するために使用します。この引数は、行をNULLとして識別します。NULL行は、コレクションから自動的に削除されます。p_null_index と組み合せて使用します。
|
p_null_value
|
p_null_index と組み合せて使用します。この引数は、NULL値を識別します。この値をNULLにすることはできません。この引数の通常の値は0(ゼロ)です。
|
p_init_query
|
コレクションが存在しない場合に、この引数によって定義した問合せを使用してコレクションを作成できます。 |
コレクションの管理には、次のユーティリティを使用できます。
コレクション内のすべてのメンバーの合計数を戻すには、COLLECTION_MEMBER_COUNT
を使用します。この数は、コレクション内の順序番号の最大値ではないことに注意してください。次に例を示します。
l_count := HTMLDB_COLLECTION.COLLECTION_MEMBER_COUNT ( p_collection_name => collection name );
要素の順序を保持したままで、コレクションを再順序付けして順序番号の欠落を排除するには、RESEQUENCE_COLLECTION
を使用します。次に例を示します。
HTMLDB_COLLECTION.RESEQUENCE_COLLECTION ( p_collection_name => collection name )
コレクションが存在するかどうかを確認するには、COLLECTION_EXISTS
を使用します。次に例を示します。
l_exists := HTMLDB_COLLECTION.COLLECTION_EXISTS ( p_collection_name => collection name );
順序番号を上下に移動させることで、コレクション内の特定のメンバーの順序番号を調整できます。順序番号を調整すると、指定した番号が別の番号と入れ替えられます。たとえば、番号2を1つ上に移動すると、2が3になり、3が2になります。
メンバーの順序番号を1つ上に移動するには、MOVE_MEMBER_UP
を使用します。メンバーの順序番号を1つ下に移動するには、MOVE_MEMBER_DOWN
を使用します。次に例を示します。
HTMLDB_COLLECTION.MOVE_MEMBER_DOWN( p_collection_name => collection name, p_seq => member sequence number);
これらのいずれかのメソッドの使用中は、次の場合にアプリケーション・エラーが表示されます。
指定したコレクションが、現行ユーザーのカレント・セッションに存在しない場合
順序番号p_seq
で指定したメンバーが存在しない場合
ただし、指定したメンバーにコレクション内で最も大きい番号または最も小さい番号(MOVE_MEMBER_UP
またはMOVE_MEMBER_DOWN
のどちらをコールするかによる)が割り当てられている場合、アプリケーション・エラーは戻されません。
コレクションのセッション・ステートを消去すると、コレクション・メンバーが削除されます。コレクションのセッション・ステートの消去が必要な場合の例には、ショッピング・カートがあります。カートを空にして最初からやり直すリクエストをユーザーから受信したときに、コレクションのセッション・ステートを消去する必要があります。コレクションのセッション・ステートを削除するには、CREATE_OR_TRUNCATE_COLLECTION
メソッドをコールするか、またはf?p
構文を使用します。
CREATE_OR_TRUNCATE_COLLECTION
をコールすると、既存のコレクションが削除され、そのコレクションが再作成されます。次に例を示します。
HTMLDB_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION( p_collection_name => collection name,
f?p
構文の6つ目の引数を使用してセッション・ステートを消去することもできます。次に例を示します。
f?p=App:Page:Session::NO:1,2,3,collection name
HTMLDB_PLSQL_JOB
パッケージを使用すると、アプリケーションのバックグラウンドでPL/SQLコードを実行できます。操作が完了していない状態でもユーザーがアプリケーションで作業を継続できるため、長時間実行操作の管理に有効な方法です。
このセクションの内容は次のとおりです。
HTMLDB_PLSQL_JOB
は、Oracleデータベースで提供されるDBMS_JOB
機能をラップしたラッパー・パッケージです。HTMLDB_PLSQL_JOB
パッケージでは、PL/SQLをバックグラウンドで実行するために必要な機能のみが公開されることに注意してください。HTMLDB_PLSQL_JOB
パッケージの記述を次に示します。
SQL> DESC HTMLDB_PLSQL_JOB FUNCTION JOBS_ARE_ENABLED RETURNS BOOLEAN PROCEDURE PURGE_PROCESS Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_JOB NUMBER IN FUNCTION SUBMIT_PROCESS RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_SQL VARCHAR2 IN P_WHEN VARCHAR2 IN DEFAULT P_STATUS VARCHAR2 IN DEFAULT FUNCTION TIME_ELAPSED RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_JOB NUMBER IN PROCEDURE UPDATE_JOB_STATUS Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_JOB NUMBER IN P_STATUS VARCHAR2 IN P_DESC
表15-2に、HTMLDB_PLSQL_JOB
パッケージで使用可能なファンクションを示します。
表15-2 HTMLDB_PLSQL_JOBパッケージで使用可能なファンクション
ファンクション | 説明 |
---|---|
SUBMIT_PROCESS
|
このプロシージャを使用すると、バックグラウンドPL/SQLを送信できます。このプロシージャは、一意のジョブ番号を戻します。このジョブ番号は、このパッケージ内の他のプロシージャおよびファンクションの参照点として使用できるため、自分のスキーマ内に格納しておくと役に立ちます。 |
UPDATE_JOB_STATUS
|
このプロシージャをコールすると、現在実行しているジョブのステータスを更新できます。このプロシージャは、送信されたPL/SQLからコールされたときに最も有効です。 |
TIME_ELAPSED
|
このファンクションを使用すると、ジョブが送信されてから経過した時間を確認できます。 |
JOBS_ARE_ENABLED
|
このファンクションをコールすると、そのデータベースが現在、HTMLDB_PLSQL_JOB パッケージへのジョブの送信をサポートするモードであるかどうかを確認できます。
|
PURGE_PROCESS
|
このプロシージャをコールすると、送信されたジョブをクリーンアップできます。送信されたジョブは、Oracle HTML DBによってそれらのレコードがクリーンアップされるか、またはPURGE_PROCESS のコールによって手動で削除するまで、HTMLDB_PLSQL_JOBS ビューに保持されます。
|
HTMLDB_PLSQL_JOB
パッケージに送信したすべてのジョブは、HTMLDB_PLSQL_JOBS
ビューで表示できます。HTMLDB_PLSQL_JOBS
ビューの記述を次に示します。
SQL> DESCRIBE HTMLDB_PLSQL_JOBS Name Null? Type --------------------------------- -------- ---------------------------- ID NUMBER JOB NUMBER FLOW_ID NUMBER OWNER VARCHAR2(30) ENDUSER VARCHAR2(30) CREATED DATE MODIFIED DATE STATUS VARCHAR2(100) SYSTEM_STATUS VARCHAR2(4000) SYSTEM_MODIFIED DATE SECURITY_GROUP_ID NUMBER
表15-3に、HTMLDB_PLSQL_JOBS
ビューで使用可能な列を示します。
表15-3 HTMLDB_PLSQL_JOBSビュー列
名前 | 説明 |
---|---|
ID
|
各行の一意の識別子です。 |
JOB
|
送信された各PL/SQLジョブに割り当てられたジョブ番号です。この値を戻すには、HTMLDB_PLSQL_JOB.SUBMIT_PROCESS ファンクションを使用します。これは、HTMLDB_PLSQL_JOB パッケージ内の他のプロシージャおよびファンクションに渡す値でもあります。
|
FLOW_ID
|
このジョブの送信元のアプリケーションです。 |
OWNER
|
アプリケーションを所有するデータベース・スキーマです。この値は、DBMS_JOB がこのコードを実行する際に、コードを解析するスキーマを識別します。
|
ENDUSER
|
このプロセスを送信させたエンド・ユーザー(アプリケーションにログインしたユーザー)です。 |
CREATED
|
ジョブが送信された日付です。 |
MODIFIED
|
ステータスが変更された日付です。 |
STATUS
|
このジョブに対してユーザーが定義したステータスです。この列を更新するには、HTMLDB_PLSQL_JOB.UPDATE_JOB_STATUS をコールします。
|
SYSTEM_STATUS
|
このジョブに対してシステムが定義したステータスです。 |
SYSTEM_MODIFIED
|
システム・ステータスが変更された日付です。 |
SECURITY_GROUP_ID
|
作業領域に割り当てられた一意のIDです。開発者は、自分の作業領域から送信されたジョブのみを参照できます。 |
送信されたジョブには、次のいずれかのシステム・ステータス設定が含まれています。
SUBMITTED: ジョブが送信済であるが、開始されていないことを示します。DBMS_JOBでは、ジョブの即時開始は保証されていません。
IN PROGRESS: DBMS_JOB
がプロセスを開始したことを示します。
COMPLETED: ジョブが完了したことを示します。
BROKEN (sqlcode) sqlerrm: ジョブに問題があり、例外が発生したことを示します。例外が発生したことを示すSQLコードおよびSQLエラー・メッセージがシステム・ステータスに表示されます。この情報を参照して、エラーの原因を判別してください。
HTMLDB_PLSQL_JOB
パッケージを実装する最も簡単な方法は、PLSQL DBMS JOB
プロセス・タイプを指定するページ・プロセスを作成することです。このプロセス・タイプを選択すると、ジョブとして指定したPL/SQLコードがApplication Builderによって送信されます。ファンクションを直接コールしないため、組込み置換アイテムであるAPP_JOB
を使用して、送信する任意のジョブのジョブ番号を指定できます。
テストおよび説明用に、PL/SQLジョブをバックグラウンドで実行する例を次に示します。
001 BEGIN 002 FOR i IN 1 .. 100 LOOP 003 INSERT INTO emp(a,b) VALUES (:APP_JOB,i); 004 IF MOD(i,10) = 0 THEN 005 HTMLDB_PLSQL_JOB.UPDATE_JOB_STATUS( 006 P_JOB => :APP_JOB, 007 P_STATUS => i || 'rows inserted'); 008 END IF; 009 HTMLDB_UTIL.PAUSE(2); 010 END LOOP; 011 END;
この例の説明を次に示します。
002から010行では、100個のレコードをemp
表に挿入するループを実行します。
APP_JOB
は、INSERTのVALUE句内でバインド変数として参照され、UPDATE_JOB_STATUS
へのコール内でP_JOB
パラメータの値として指定されます。
APP_JOB
は、HTMLDB_PLSQL_JOB
に送信される際に、このプロセスに割り当てられるジョブ番号を表します。プロセス・コード内にこの予約アイテムを指定すると、実行時に実際のジョブ番号に自動的に置換されます。
この例では、コード・ブロック内で、10個のレコードごとにUPDATE_JOB_STATUS
がコールされることに注意してください。通常、Oracleトランザクション規則では、コード・ブロック内で実行された更新は、トランザクション全体がコミットされるまで表示されません。一方、HTMLDB_PLSQL_JOB.UPDATE_JOB_STATUS
プロシージャは、ジョブが成功したか失敗したかにかかわらず更新を実行するように実装されています。このことは、次の2つの理由から重要です。
ステータスが「100行が挿入されました。」の場合でも、操作全体が成功したわけではありません。コード・ブロックでコミットが試行されたときに例外が発生した場合、ステータスの更新は個別にコミットされるため、HTMLDB_PLSQL_JOBS
のuser_status
列は影響を受けません。
これらの更新は自律的に実行されます。ジョブが完了する前にジョブ・ステータスを表示できます。これによって、バックグラウンドで実行中の各操作についてステータス・テキストを表示できます。
Webサービスを使用すると、プラットフォームおよび言語に依存しない環境で、Webを介したアプリケーション間の通信が可能になります。 典型的なWebサービスの使用例には、ビジネス・アプリケーションでHTTPを介するプロトコルを使用して、指定したURLのサービスにリクエストを送信することがあります。 サービスはリクエストを受信し、処理してからレスポンスを返します。 外部Webサービスとのコールは、Oracle HTML DBで開発したアプリケーション内に組み込むことができます。
Oracle HTML DBのWebサービスは、SOAP(Simple Object Access Protocol)に基づいています。SOAPは、World Wide Web Consortium(W3C)が策定した、インターネットを介したリクエストとレスポンスの送受信用の標準プロトコルです。SOAPメッセージは、サービス・プロバイダとサービス・ユーザー間でSOAPエンベロープに入れて送受信できます。
SOAPには、主に2つのメリットがあります。
SOAPはXMLをベースとしており、使用方法も容易です。
このプロトコルではHTTPなどの単純な転送プロトコルが使用されているため、SOAPメッセージはファイアウォールでブロックされることはありません。
このセクションの内容は次のとおりです。
注意: SOAP 1.1仕様はW3C覚書です。(SOAPより優先される標準を作成するために、W3C XML Protocol Working Groupが結成されています。)Simple Object Access Protocol(SOAP)1.1の詳細は、次のWebサイトを参照してください。 http://www.w3.org/TR/SOAP/ |
Oracle HTML DBでWebサービスを使用するには、ウィザードを使用してWebサービス参照を作成します。各Webサービス参照は、ターゲットWebサービスを説明するWeb Services Description Language(WSDL)ドキュメントをベースにしています。Webサービス参照を作成する場合、ウィザードはWSDLを分析して必要な情報をすべて収集し、有効なSOAPメッセージを作成します。必要な情報は、次のとおりです。
HTTPを介したSOAPリクエストのポストに使用するURL
SOAP HTTPリクエストを識別するUniform Resource Identifier(URI)
各操作の入力パラメータ
各操作の出力パラメータ
Webサービス参照は、「Webサービス参照」ページで管理します。
「Webサービス参照」ページにアクセスするには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「アプリケーション」リストからアプリケーションを選択します。
Application Builderが表示されます。
「共有コンポーネント」をクリックします。
「共有コンポーネント」ページが表示されます。
「ロジック」で、「Webサービス参照」を選択します。
「Webサービス参照」ページが表示されます。
インターネットのアクセスにプロキシ・サーバーが必要な環境の場合は、Webサービス参照を作成する前に「アプリケーション属性」ページでプロキシ・サーバー・アドレスを指定する必要があります。
アプリケーションにプロキシ・アドレスを指定するには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「アプリケーション」リストからアプリケーションを選択します。
Application Builderが表示されます。
「属性を編集」をクリックします。
「アプリケーションの定義」で、「プロキシ・サーバー」にプロキシ・サーバーを入力します。
Webサービス参照を作成する場合、WSDLの位置の特定方法を決定する必要があります。 WSDLの位置の特定には、2つの方法があります。
UDDIレジストリを検索する
WSDLドキュメントのURLを入力する
Universal Description, Discovery, and Integration(UDDI)レジストリは、ビジネスのWebサービスを登録するディレクトリです。
UDDIレジストリを検索して、新しいWebサービスを作成するには、次の手順を実行します。
「Webサービス参照」ページにナビゲートします。(「「Webサービス参照」ページへのアクセス」を参照。)
「作成」をクリックします。
WSDLを検出するためにUDDIレジストリを検索するかどうかを尋ねるプロンプトが表示されたら、「はい」をクリックします。
「UDDIの位置」では、次のいずれかを実行できます。
UDDIレジストリへのURLエンドポイントを入力する。
「リスト」アイコンをクリックして、UDDIレジストリを選択する。
「サービスの検索」で、ビジネス名またはサービス名のどちらを検索するかを指定します。
「検索タイプ」で、ビジネス名またはサービス名のどちらを検索するかを指定します。両方を検索することはできません。
「名前」に、検索するビジネス名またはサービス名を入力します。
オプションで、検索で大文字と小文字を区別するか、または完全一致させるかを指定します。ワイルドカード文字としてパーセント記号(%)を使用します。
「検索」をクリックします。
検索結果が表示されたら、選択した後で「次へ」をクリックします。
選択したWebサービスについて説明するサマリー・ページが表示されます。
選択内容を確認し、「次へ」をクリックして続行します。
WSDLドキュメントへのURLが「WSDLの位置」フィールドに表示されます。
「終了」をクリックします。
Webサービス参照がWebサービス参照リポジトリに追加されます。
特定のWSDLドキュメントへのURLを指定して、新しいWebサービスを作成するには、次の手順を実行します。
「Webサービス参照」ページにナビゲートします。(「「Webサービス参照」ページへのアクセス」を参照。)
「作成」をクリックします。
WSDLを検出するためにUDDIレジストリを検索するかどうかを尋ねるプロンプトが表示されたら、「いいえ」をクリックします。
「WSDLの位置」に、WSDLドキュメントへのURLを入力します。
「終了」をクリックします。
Webサービス参照がWebサービス参照リポジトリに追加されます。
Webサービス参照がWebサービス参照リポジトリに格納されます。
Webサービス参照リポジトリにアクセスするには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「アプリケーション」リストからアプリケーションを選択します。
Application Builderが表示されます。
「共有コンポーネント」をクリックします。
「共有コンポーネント」ページが表示されます。
「ロジック」で、「Webサービス参照」を選択します。
Webサービス参照リポジトリでは、次の操作を実行できます。
「編集」アイコンをクリックして、参照を編集します。
「実行」アイコンをクリックして、参照をテストします。
参照名をクリックして、参照の詳細を表示します。
Webサービス参照を作成した後、「Webサービス参照をテスト」ページでテストできます。
Webサービス参照をテストするには、次の手順を実行します。
Webサービス・リポジトリにナビゲートします。(「Webサービス参照リポジトリの使用」を参照。)
Webサービス参照名の横にある「実行」をクリックします。
「Webサービス参照をテスト」ページが表示されます。ページの上部に、Webサービス名とURLエンドポイントが表示されます。
「操作」から、実行する操作を選択します。
「入力パラメータ」で、適切な値を入力します。
「テスト」をクリックします。
ページの下部に、メッセージ・リクエストとレスポンスが表示されます。
「Webサービスのフォームとレポートを作成」ウィザードでは、入力フォーム、送信ボタンおよび結果を表示するレポートが作成されます。Webサービス参照を作成した直後、または新しいページを追加して、このウィザードを実行できます。
このウィザードは、Webサービスの結果が非スカラーであることが予想される場合に使用します。Amazon社のWebサービスが良い例です。このWebサービスでは、入力フォームに入力された検索基準に基づいて多くの結果が戻されます。
Webサービス参照を作成した直後に、フォームとレポートを作成するには、次の手順を実行します。
Webサービス参照を作成します。(「Webサービス参照の作成」を参照。)
Webサービス参照が追加された後で、「Webサービスのフォームとレポートを作成」を選択します。
「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。
「ページおよびリージョン属性を指定」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。
「入力パラメータのアイテム」で、次の手順を実行します。
フォームに追加するアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。
必要に応じて、アイテム・ラベルを編集します。
「ベース・ノード」で、次の手順を実行します。
「一時結果セット名」に、Webサービスの結果を格納するコレクションの名前を入力します。
「レポート対象の結果ツリー」で、作成されるXML文書(レポートに含める情報を含む)の一部を選択します。
「表示する結果パラメータ」で、レポートに含めるパラメータを選択します。
「終了」をクリックします。
既存のWebサービス参照がある場合は、新しいページを追加して、入力フォームとレポートを作成できます。
新しいページを追加して、フォームとレポートを作成するには、次の手順を実行します。
Webサービス参照を作成します。(「Webサービス参照の作成」を参照。)
新しいページを作成します。(「ページの追加」を参照。)
「ページを作成」ウィザードで、次の手順を実行します。
「コンポーネントを含むページ」を選択します。
「コンポーネント・タイプを選択」で、「フォーム」を選択します。
「ページを作成」で、「Webサービスのフォームとレポート」を選択します。
「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。
「ページおよびリージョン属性を指定」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。
「入力パラメータのアイテム」で、次の手順を実行します。
フォームに追加するアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。
必要に応じて、アイテム・ラベルを編集します。
「ベース・ノード」で、次の手順を実行します。
「一時結果セット名」に、Webサービスの結果を格納するコレクションの名前を入力します。
「レポート対象の結果ツリー」で、作成されるXML文書(レポートに含める情報を含む)の一部を選択します。
「表示する結果パラメータ」で、レポートに含めるパラメータを選択します。
「終了」をクリックします。
「Webサービスのフォームを作成」ウィザードでは、フォームと送信ボタンが作成されます。Webサービス参照を作成した直後、またはページ定義から、このウィザードを実行できます。
このウィザードは、Webサービスの結果がスカラーであることが予想される場合に使用します。株価を調べるWebサービスが良い例です。入力は銘柄記号で、出力はスカラーの適正価格であるためです。
Webサービス参照を作成した直後に、フォームを作成するには、次の手順を実行します。
Webサービス参照を作成します。(「Webサービス参照の作成」を参照。)
Webサービス参照が追加された後で、「Webサービスのフォームを作成」を選択します。
「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。
「ページおよびリージョン属性を指定」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。
「入力パラメータのアイテム」で、次の手順を実行します。
追加するアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。
必要に応じて、アイテム・ラベルを編集します。
「出力パラメータのアイテム」で、次の手順を実行します。
追加する必要があるアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。
必要に応じて、アイテム・ラベルを編集します。
「終了」をクリックします。
既存のWebサービス参照がある場合は、新しいページを追加して、フォームを作成できます。
新しいページを追加して、フォームを作成するには、次の手順を実行します。
Webサービス参照を作成します。(「Webサービス参照の作成」を参照。)
新しいページを作成します。(「ページの追加」を参照。)
「ページを作成」ウィザードで、次の手順を実行します。
「コンポーネントを含むページ」を選択します。
「コンポーネント・タイプを選択」で、「フォーム」を選択します。
「ページを作成」で、「Webサービスのフォーム」を選択します。
「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。
「ページおよびリージョン属性を指定」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。
「入力パラメータのアイテム」で、次の手順を実行します。
追加する必要があるアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。
必要に応じて、アイテム・ラベルを編集します。
「出力パラメータのアイテム」で、次の手順を実行します。
追加する必要があるアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。
必要に応じて、アイテム・ラベルを編集します。
「終了」をクリックします。
ページ上で、Webサービスをプロセスとして実装することもできます。このプロセスを実行すると、リクエストがサービス・プロバイダに送信されます。その後で、レポートにリクエスト結果を表示できます。
Webサービスをプロセスとして起動するには、次の手順を実行します。
新しいページを作成します。(「ページの追加」を参照。)
「ページを作成」ウィザードで、次の手順を実行します。
「空白ページ」を選択します。
タブを使用するかどうかを尋ねるプロンプトが表示されたら、「いいえ」を選択します。
ページ定義にナビゲートします。(「ページ定義の表示」を参照。)
「ページ・レンダリング」の「プロセス」で、「作成」アイコンをクリックします。
プロセスのカテゴリから、「Webサービス」を選択します。
プロセス名、順序およびプロセス・ポイントを指定します。
Webサービス参照および実行する操作を選択します。
プロセスを定義します。「Webサービスの出力パラメータ」でオプションを選択すると、結果をコレクションまたはページ上のアイテムに格納できます。
コレクションに結果を格納するには、次の手順を実行します。
「結果の格納場所」で、「コレクション」を選択します。
「値」フィールドにコレクションの名前を入力します。
ページ上のアイテムに結果を格納するには、次の手順を実行します。
「結果の格納場所」で、「アイテム」を選択します。
表示されるフィールドに該当するアイテムの値を入力します。
「プロセスを作成」をクリックします。
Webサービスのリクエスト結果を表示するレポートを作成するには、次の手順を実行します。
ページ定義にナビゲートします。
「リージョン」で、「作成」アイコンをクリックします。
「リージョンを作成」ウィザードが表示されます。
「リージョン・タイプ」で、「レポート」を選択します。
「レポート実装」で、「Webサービスの結果を含むコレクションのレポート」を選択します。「リージョン属性を指定」で、リージョン・タイトルを入力し、オプションでリージョン属性を編集します。
「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。
「レポート対象の結果ツリー」で、作成されるXML文書(レポートに含める情報を含む)の一部を選択します。
「結果パラメータ」で、次の手順を実行します。
「一時結果セット名」に、Webサービスの結果を格納するコレクションの名前を入力します。
該当するパラメータを選択した後、選択解除します。
「SQLレポートを作成」をクリックします。
Webサービス・タイプのプロセスを作成した後で、Webサービス・プロセスを編集すると、入力パラメータを静的な値にマップできます(たとえば、キーを渡すなど)。
Webサービス・プロセスを編集するには、次の手順を実行します。
Webサービス・プロセスを作成します。(「プロセスとしてのWebサービスの起動」を参照。)
Webサービス・プロセスが含まれているページ定義にナビゲートします。
プロセス名を選択します。
「ページ・プロセスを編集」ページが表示されます。
「Webサービスの入力パラメータ」までスクロールします。
入力パラメータを静的な値にマップするには、次の手順を実行します。
「Webサービスの入力パラメータ」までスクロールします。
該当するパラメータ名の横にある「値」フィールドに値を入力します。
「変更を適用」をクリックします。
設定項目を使用して、特定のユーザーのセッション・ステートを設定できます。設定した設定項目は、Oracle HTML DB管理者のみが削除できます。ユーザー設定項目は、ページ・プロセスの作成または設定項目のアイテム・ソース値の計算によって設定するか、あるいはPL/SQL APIを使用してプログラム的に設定できます。
このセクションの内容は次のとおりです。
特定のユーザーのユーザー設定項目は、「セッション・ステートの管理」ページに表示されます。
特定のユーザーのユーザー設定項目を表示するには、次の手順を実行します。
Oracle HTML DBのホームページから、「管理」タブを選択します。
「管理サービス」の「ユーザーを管理」をクリックして、「セッション・ステート」をクリックします。
「セッション・ステートの管理」ページが表示されます。
「ユーザーの設定項目をレポート」をクリックします。
表示されるフィールドにユーザー名を入力して、「実行」をクリックします。
ユーザー設定項目は、ページ・プロセスの作成または設定項目アイテムの作成によって、あるいはプログラム的にアプリケーション内に設定できます。
このセクションの内容は次のとおりです。
ページ・プロセスの作成によってユーザー設定項目を設定するには、次の手順を実行します。
該当するページ定義にナビゲートします。(「ページ定義の表示」を参照。)
「ページ・プロセス」で、「作成」アイコンをクリックします。
「ページ計算を作成」ウィザードが表示されます。
プロセス名、順序およびプロセス・ポイントを指定します。
「タイプ」から、次のいずれかの項目を選択します。
設定項目をアイテムの値に設定
アイテムがNULLでない場合、設定項目をアイテムの値に設定
表示されるフィールドに、次の形式で設定項目を指定します。
PreferenceName:Item
「ページ・アイテム」をクリックして、使用可能なアイテムのリストを表示します。
画面に表示される手順に従います。
アイテム・ソース・タイプを設定項目として定義することによって、ユーザー設定項目に基づいてアイテムのソースを設定できます。
ユーザー設定項目に基づいてアイテムのソースを定義するには、次の手順を実行します。
該当するページ定義にナビゲートします。(「ページ定義の表示」を参照。)
「アイテム」で、「作成」アイコンをクリックします。
「ページ計算を作成」ウィザードが表示されます。
「アイテム名」属性および「表示位置」属性を指定し、「次へ」をクリックします。
「アイテム属性」を指定し、「次へ」をクリックします。
「アイテム・ソース」リストから、「設定項目」を選択します。
「アイテム・ソース値」で、設定項目の名前を入力します。
画面に表示される手順に従います。
ユーザー設定項目をプログラム的に設定または参照するには、PL/SQL APIを使用する必要があります。ユーザー・レベルのキャッシュが、プログラムを介して使用できます。ユーザー・レベルの設定項目NAMED_PREFERENCE
を設定するには、set_preference
ファンクションを使用します。次に例を示します。
HTMLDB_UTIL.SET_PREFERENCE( p_preference=>'NAMED_PREFERENCE', p_value =>:ITEM_NAME);
ユーザー設定項目の値を参照するには、GET_PREFERENCES
ファンクションを使用します。次に例を示します。
NVL(HTMLDB_UTIL.GET_PREFERENCE('NAMED_PREFERENCE'),15)
前述の例では、設定項目に値が含まれていない場合、この設定項目の値はデフォルトの15になります。
特定のユーザーのユーザー設定項目は、手動で消去できます。
特定のユーザーのユーザー設定項目を手動で消去するには、次の手順を実行します。
Oracle HTML DBのホームページから、「管理」タブを選択します。
「管理サービス」の「ユーザーを管理」をクリックして、「セッション・ステート」をクリックします。
「セッション・ステートの管理」ページが表示されます。
「選択したユーザーの設定項目を消去」をクリックします。
ユーザーを指定し、画面に表示される手順に従います。
ユーザー設定項目をリセットするには、ページ・プロセスを作成し、プロセス・タイプの「設定項目をリセット」を選択します。
ページ・プロセスを使用してユーザー設定項目をリセットするには、次の手順を実行します。
該当するページ定義にナビゲートします。(「ページ定義の表示」を参照。)
「ページ・プロセス」で、「作成」アイコンをクリックします。
「ページ計算を作成」ウィザードが表示されます。
プロセス名、順序およびプロセス・ポイントを指定します。
「タイプ」から、「設定項目をリセット」を選択します。
画面に表示される手順に従います。