次の項目については,それぞれの箇所を参照してください。
- FOR {UPDATE〔OF列名〔,列名〕…〕〔NOWAIT〕|READ ONLY}
- FOR UPDATE 〔OF列名〔,列名〕…〕をFOR UPDATE句といいます。
- FOR UPDATE
- カーソルを使用して検索中の表に対して,そのカーソルを使用した行の更新,又は削除をして,更にほかのカーソル,又は直接探索条件を指定して行を更新,追加,又は削除する場合に指定します。
- FOR UPDATEを省略した場合,そのカーソルを使用して検索中の表に対して行の更新,追加,又は削除はできません。
- カーソル指定,又は排他オプション中に次のどれかの指定を含む場合は,FOR UPDATE句の指定はできません。
- (a) UNION〔ALL〕,又はEXCEPT〔ALL〕
- (b) 最も外側の問合せ指定のFROM句に指定した表を,副問合せのFROM句に指定
- (c) 最も外側の問合せ指定での表の結合
- (d) 最も外側の問合せ指定でのFROM句の導出表
- (e) 最も外側の問合せ指定でのSELECT DISTINCT
- (f) 最も外側の問合せ指定でのGROUP BY句
- (g) 最も外側の問合せ指定でのHAVING句
- (h) 最も外側の問合せ指定に対する集合関数
- (i) 最も外側の問合せ指定に対するウィンドウ関数
- (j) 最も外側の問合せ指定のFROM句に外部表を指定
- (k) 最も外側の問合せ指定のFROM句中で,次に示すどれかのビュー表を指定
- ビュー定義文で上記(a)~(j)を指定して定義したビュー表
- ビュー定義文で最も外側の問合せ指定のSELECT句に,列指定以外の値式を指定して定義したビュー表
- ビュー定義文中で,READ ONLYを指定して定義したビュー表
- (l) WITHOUT LOCK NOWAIT
- (m) WITH句を指定した問合せ式本体の最も外側の問合せ指定のFROM句に問合せ名を指定
- OF列名〔,列名〕…
- カーソルを使用して検索中の表に対して,そのカーソルを使用した検索行の更新だけをする場合に,更新する列を指定します。
- SELECT文の選択式で指定していない列でも指定できます。ただし,同じ列を2回以上指定できません。
- カーソルを使用して検索中の表に対して,そのカーソル及びほかのカーソルを使用した行の更新,削除がなく,カーソルを使用しない行の更新,削除,及び追加もしない場合には,オペランドを省略してください。
- 指定する列名は,AS列名に指定した列名ではなく,最も外側の問合せ指定のFROM句に指定した表の列を指定します。
- 〔NOWAIT〕
- 排他オプションにWITH EXCLUSIVE LOCK NO WAITを指定した場合と同じ動作をします。ただし,排他オプションを指定した場合,FOR UPDATE句にNOWAITは指定できません。
- 排他オプションにWITH EXCLUSIVE LOCK NO WAITを指定した場合の動作については,「2.19 排他オプション」を参照してください。
- FOR READ ONLY
- カーソルを使用して検索中に,ほかのカーソル,又は直接探索条件を指定して更新する場合に指定します。検索中の更新が検索結果に影響を与えないようにする場合にFOR READ ONLYを指定します。
- FOR READ ONLY句を指定した場合,次の制限があります。
- (a) 選択式中に,結果が次のデータ型になるスカラ演算,関数呼出し,及びコンポネント指定は指定できません。
- BLOB
- 最大長が32,001バイト以上のBINARY
- BOOLEAN
- 抽象データ型
- (b) 選択式中のWRITE指定の出力BLOB値には,列指定だけ指定できます。
- (c) GET_JAVA_STORED_ROUTINE_SOURCE指定は指定できません。
ホールダブルカーソルを使用する場合に指定します。ホールダブルカーソルについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
ホールダブルカーソルについての規則を次に示します。
- 次の場合,ホールダブルカーソルは使用できません。
- リモートデータベースアクセス
- プラグインを使用した抽象データ型の列を指定した場合
- プラグインを使用した関数呼出しを指定した場合
- プラグインを使用した関数呼出しを指定して導出した,名前付きの導出表に対する問合せ
- 外部表,又は外部表を基表とするビュー表
- ホールダブルカーソルが開いている場合,定義系SQLは実行できません。また,ホールダブルカーソルが閉じている場合,定義系SQLを実行するとホールダブルカーソルを使用している前処理は無効になります。
- ホールダブルカーソルを使用したSELECT文に対してOPEN文を実行後,そのSELECT文中で使用している表に対してPURGE TABLE文を実行すると,カーソルは閉じた状態になります。
- ホールダブルカーソルを使用したSELECT文に対してOPEN文を実行してからDISCONNECTするまでの間に,そのSELECT文中で使用している表に対して,ほかのユーザが定義系SQL文を発行すると,定義系SQLは排他待ちの状態になります。また,ホールダブルカーソルを使用したSELECT文に対する前処理が有効な間に,そのSELECT文中で使用している表に対して,ほかのユーザが定義系SQL文を発行すると,定義系SQLは排他待ちの状態になります。