Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


3.5.2 FOR UPDATE句とFOR READ ONLY句の使い分け

カーソルを使用して検索中の表に対して行の更新,削除,及び挿入する場合,DECLARE CURSOR,又はALLOCATE CURSORでカーソルを定義する必要があります。このとき,UAPの処理内容に応じて,FOR UPDATE句(FOR UPDATE OF句を含む),及びFOR READ ONLY句を指定します。

カーソルを使用した行の更新又は削除をする場合,検索した行のほとんどを更新しないときは,排他オプションとしてWITH SHARE LOCKを指定するとよいです。排他オプションを省略した場合は,WITH EXCLUSIVE LOCKが仮定されます。

FOR UPDATE句(FOR UPDATE OF句を含む),及びFOR READ ONLY句は,指定によって処理効率が著しく低下する場合があるので注意が必要です。

FOR UPDATE句(FOR UPDATE OF句を含む),及びFOR READ ONLY句を指定するときに考慮する内容を次の表に示します。

表3‒28 FOR UPDATE句,及びFOR READ ONLY句を指定するとき考慮する内容

指定句

用途

考慮する内容

FOR UPDATE句

カーソルを使用して検索中の表に対して,そのカーソルを使用した行の更新,又は削除をして,更にカーソルを使用しない行の更新,削除,又は追加をする場合に指定する。

カーソルを使用した行の検索中に,対象のインデクスが更新された場合でも,動作を保証するため,1回目のFETCHで内部的に作業表を作成する。この作業表の作成が検索時のオーバヘッドになる。

FOR UPDATE OF句

カーソルを使用して検索中の表に対して,一部の列だけを更新する場合に指定する。

列名で指定された列に付けられたインデクスが検索に使用されると,1回目のFETCHで内部的に作業表を作成する。この作業表の作成が検索時のオーバヘッドになる。

FOR READ ONLY句

カーソルを使用して検索中に,ほかのカーソルを指定して更新(削除,挿入を含む)をする場合,又は直接探索条件を指定して更新(削除を含む)をする場合に指定する。

カーソルを使用した検索中にほかのカーソルで更新する場合,処理結果に影響しないようにするため,1回目の FETCHで内部的に作業表を作成する。この作業表の作成が検索時のオーバヘッドになる。

FOR UPDATE句,及びFOR READ ONLY句を指定しない場合でも,更新(削除を含む)をするときは,1回目のFETCHで内部的な作業表を作成することがあるので,オーバヘッドを考慮する必要があります。

なお,検索だけをするときは内部的な作業表を作成しないので,オーバヘッドを考慮する必要ありません。