227 OWA_OPT_LOCK

OWA_OPT_LOCKパッケージには、更新内容の消失を防ぐためのコミット時ロック方策を実行するサブプログラムが含まれています。

この章のトピックは、次のとおりです:

参照:

このパッケージの実装の詳細は、次のマニュアルを参照してください。

227.1 OWA_OPT_LOCKの概要

OWA_OPT_LOCKパッケージには、更新内容の消失を防ぐためのコミット時ロック方策を実行するサブプログラムが含まれています。

ユーザーが更新しようとしている行が、作業中に他のユーザーによって変更されているかどうかを検査します。

HTTPはステートレス・プロトコルであるため、PL/SQLゲートウェイは、従来型のデータベースのロック構造を使用できません。OWA_OPT_LOCKパッケージには、更新内容の消失問題に対処する方法が2つあります。

  • 隠しフィールド方式では、HTMLページの隠しフィールドに前の値を格納します。ユーザーが更新を要求すると、PL/SQLゲートウェイはこれらの値をデータベースの現在の状態と照合します。更新操作は、値が一致した場合にのみ実行されます。この方式を使用するには、owa_opt_lock.store_valuesプロシージャをコールします。

  • チェックサム方式では、値そのものではなくチェックサムを格納します。この方式を使用するには、owa_opt_lock.checksumファンクションをコールします。

これらの方式は、コミット時に実行されます。これらの方式では、他のユーザーによる更新の実行は妨げませんが、介入更新が発生した場合に現行の更新を拒否します。

227.2 OWA_TEXTタイプ

このデータ・タイプは、ROWIDを保持するためのPL/SQL表です。

TYPE VCARRAY IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER

これは、OWA_TEXT.VC_ARRデータ・タイプと異なるので注意してください。

227.3 OWA_OPT_LOCKサブプログラムの要約

この表は、OWA_OPT_LOCKサブプログラムを示し、簡単に説明しています。

表227-1 OWA_OPT_LOCKパッケージのサブプログラム

サブプログラム 説明

CHECKSUMファンクション

チェックサム値を戻します。

GET_ROWIDファンクション

ROWID値を戻します。

STORE_VALUESプロシージャ

後で検証するために、隠しフィールドに未修正の値を格納します。

VERIFY_VALUESファンクション

格納された値を修正値と照合します。

227.3.1 CHECKSUMファンクション

このファンクションは、指定された文字列または表内の行についてのchecksum値を戻します。表内の行の場合、このファンクションは、行内の列の値を基にしてchecksum値を計算します。このファンクションには2つのバージョンがあります。

1番目のバージョンは、指定された文字列に基づいてchecksumを戻します。これは、データベースによって実行される、純粋な32ビットchecksumで、インターネット1プロトコルに基づいています。

2番目のバージョンは、表内の行の値に基づいてchecksumを戻します。これは、不純な32ビットchecksumで、インターネット1プロトコルに基づいています。

構文

OWA_OPT_LOCK.CHECKSUM(
   p_buff        IN       VARCHAR2) 
 RETURN NUMBER;

OWA_OPT_LOCK.CHECKSUM(
   p_owner       IN      VARCHAR2,
   p_tname       IN       VARCHAR2,
   p_rowid       IN       ROWID) 
  RETURN NUMBER;

パラメータ

表227-2 CHECKSUMファンクションのパラメータ

パラメータ 説明

p_buff

checksumを計算するnstring。

p_owner

表の所有者。

p_tname

表の名前。

p_rowid

checksum値を計算するp_tname内の行。VCARRAY値を適切なROWIDに変換するには、GET_ROWIDファンクションを使用します。

227.3.2 GET_ROWIDファンクション

このファンクションは、指定されたOWA_OPT_LOCK.VCARRAY DATA TYPEからのROWIDデータ・タイプを戻します。

構文

OWA_OPT_LOCK.GET_ROWID(
   p_old_values      IN      vcarray) 
 RETURN ROWID;

パラメータ

表227-3 GET_ROWIDファンクションのパラメータ

パラメータ 説明

p_old_values

このパラメータは、通常、HTMLフォームから渡されます。

227.3.3 STORE_VALUESプロシージャ

このプロシージャは、後で更新する行の列の値を格納します。この値は、非表示HTMLフォーム要素内に格納されます。

構文

OWA_OPT_LOCK.STORE_VALUES(
   p_owner        IN       VARCHAR2,
   p_tname        IN       VARCHAR2,
   p_rowid        IN       ROWID);

パラメータ

表227-4 STORE_VALUESプロシージャのパラメータ

パラメータ 説明

p_owner

表の所有者。

p_tname

表の名前。

p_rowid

値を格納する行。

使用上のノート

行を更新する前に、これらの値を現在の行の値と比較して、行の値が変更されていないことを確認してください。値が変更されている場合、そのユーザーに警告して、更新を実行するかどうかを判断してもらってください。

このプロシージャは、一連の非表示フォーム要素を生成します。

  • 表の所有者に対して1つの非表示フォーム要素が作成されます。要素名は"old_p_tname"です。ここで、p_tnameは表の名前です。要素の値は、所有者名です。

  • 表の名前に対して1つの非表示フォーム要素が作成されます。要素名は"old_p_tname"です。ここで、p_tnameは表の名前です。要素の値は、表の名前です。

  • 行内の列ごとに1つの要素が作成されます。要素名は"old_p_tname"です。ここで、p_tnameは表の名前です。要素の値は、列の値です。

「VERIFY_VALUESファンクション」も参照してください。

227.3.4 VERIFY_VALUESファンクション

このファンクションは、指定された行の値が最後の問合せ以降に更新されたかどうかを検証します。

このファンクションはSTORE_VALUESプロシージャとともに使用します。

構文

OWA_OPT_LOCK.VERIFY_VALUES(
   p_old_values IN vcarray) 
 RETURN BOOLEAN;

パラメータ

表227-5 VERIFY_VALUESファンクションのパラメータ

パラメータ 説明

p_old_values

次の情報を含むPL/SQL表。

  • p_old_values(1)は表の所有者を指定。

  • p_old_values(2)は表を指定。

  • p_old_values(3)は検証する行のROWIDを指定。

残りのインデックスには、表内の列の値が含まれます。

通常、このパラメータは、非表示フォーム要素上に行の値を格納するためにすでにSTORE_VALUESプロシージャをコール済のHTMLフォームから渡されます。

戻り値

他の更新が実行されていない場合はTRUEで、実行されている場合はFALSEになります。