owa_opt_lockパッケージには、更新情報が失われるのを防ぐためにコミット時ロック方式を実施するサブプログラムが含まれています。ユーザーが更新しようとしている行が、作業中に他のユーザーによって変更されているかどうかを検査します。
HTTPはステートレスなプロトコルなので、PL/SQL Gatewayでは従来型のデータベース・ロック構造は使用できません。owa_opt_lockパッケージは、更新情報が失われる問題に対処するための2つの方法を提供します。
非表示フィールドを使用する方法は、HTMLページの非表示フィールドに以前の値を格納します。ユーザーが更新をリクエストすると、PL/SQL Gatewayは、これらの値とデータベースの現在の状態を比較して検査します。更新操作は、値が一致する場合にのみ実行されます。この方法を使用するには、owa_opt_lock.store_valuesプロシージャをコールします。
チェックサムを使用する方法は、値そのものではなくチェックサムを格納します。この方法を使用するには、owa_opt_lock.checksumファンクションをコールします。
これらの方法はオプティミスティックです。他のユーザーが更新できないようにするのではなく、更新の割込みが発生した場合に現在の更新を無効にします。
owa_opt_lock.vcArrayデータ型: ROWIDを格納するデータ型です。
owa_opt_lock.checksumファンクション: チェックサムの値を返します。
owa_opt_lock.get_rowidファンクション: ROWIDの値を返します。
owa_opt_lock.store_valuesプロシージャ: 後で検証するために、変更前の値を非表示フィールドに格納します。
owa_opt_lock.verify_valuesファンクション: 格納されている値と変更後の値を比較して検証します。
このデータ型は、ROWIDを保持するためのPL/SQLの表です。
vcArray型は、table of varchar2(2000) index by binary_integerです。
このデータ型はowa_text.vc_arrデータ型とは異なることに注意してください。
表5-1にowa_opt_lock.vcArrayデータ型のプロパティを示します。
指定された文字列または表内の行に対するチェックサムの値を返します。表内の行の場合は、その行の列の値に基づいてチェックサムの値を計算します。このファンクションには2つのバージョンがあります。
1番目のバージョンは、指定された文字列に基づくチェックサムを返します。これは、Internet 1プロトコルに基づいてデータベースにより実行される純粋な32ビット・チェックサムです。
2番目のバージョンは、表内の行の値に基づいてチェックサムを返します。これは、Internet 1プロトコルに基づく不純な32ビット・チェックサムです。
表5-2にowa_opt_lock.checksumファンクションのプロパティを示します。
表5-2 owa_opt_lock.checksumファンクション
プロパティ | 定義 |
---|---|
構文: |
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; |
パラメータ: |
p_buff: チェックサムを計算する文字列。 p_owner: 表の所有者。 p_tname: 表の名前。 p_rowid: チェックサムの値を計算するp_tnameの行。vcArrayの値を適切なrowidに変換するには、owa_opt_lock.get_rowidファンクションを使用する。 |
戻り値: |
チェックサムの値。 |
指定されたowa_opt_lock.vcArrayデータ型からROWIDデータ型を返します。
表5-3にowa_opt_lock.get_rowidファンクションのプロパティを示します。
後で更新する行の列の値を格納します。値は、HTMLフォームの非表示要素に格納されます。行を更新する前に、これらの値と行の現在の値を比較して、行の値が変更されていないことを確認します。値が変更されている場合は、ユーザーに警告を出し、更新を実行するかどうかをユーザーに決定させることができます。
表5-4にowa_opt_lock.store_valuesプロシージャのプロパティを示します。
表5-4 owa_opt_lock.store_valuesプロシージャ
プロパティ | 定義 |
---|---|
構文: |
owa_opt_lock.store_values( p_owner in varchar2 p_tname in varchar2 p_rowid in rowid); |
パラメータ: |
p_owner: 表の所有者。 p_tname: 表の名前。 p_rowid: 値を格納する行。 |
実行結果: |
一連の非表示フォーム要素。 表の所有者に対して、1つの非表示フォーム要素が作成される。要素の名前はold_p_tname。ここで、p_tnameは表の名前。要素の値は所有者名。 表の名前に対して、1つの非表示フォーム要素が作成される。要素の名前はold_p_tname。ここで、p_tnameは表の名前。要素の値は表の名前。 行の列ごとに1つの要素が作成される。要素の名前はold_p_tname。ここで、p_tnameは表の名前。要素の値は列の値。 |
関連項目: |
指定された行の値が、最後の問合せ以降に更新されているかどうかを検証します。このファンクションは、owa_opt_lock.store_valuesプロシージャとあわせて使用します。
表5-5にowa_opt_lock.verify_valuesファンクションのプロパティを示します。
表5-5 owa_opt_lock.verify_valuesファンクション
プロパティ | 定義 |
---|---|
構文: |
owa_opt_lock.verify_values(p_old_values in vcArray) return boolean; |
パラメータ: |
p_old_values: 次の情報を含むPL/SQLの表。 p_old_values(1)は、表の所有者を示す。 p_old_values(2)は、表を示す。 p_old_values(3)は、検証する行のrowidを示す。 残りの索引には、表の列の値が含まれる。 通常、このパラメータはHTMLフォームから渡される。このHTMLフォームは、以前にowa_opt_lock.store_valuesプロシージャをコールして、非表示フォーム要素に行の値を格納したもの。 |
戻り値: |
他の更新が実行されていない場合はTRUE、実行されている場合はFALSE。 |
関連項目: |