isolation-clause (副選択照会)
オプションの isolation-clause は、副選択または全選択が実行される分離レベルを指定し、さらに特定のタイプのロックをかけるかどうかを指定します。
lock-request-clause
lock-request-clause が適用されるのは、照会と、読み取りの位置決め操作 (挿入、更新、または削除の操作での) だけです。 挿入、更新、および削除の各操作自体は、データベース・マネージャーが判別するロックを使用して実行されます。
オプションの lock-request-clause は、
データベース・マネージャーがかけたままにするロックのタイプを指定します。
- SHARE
- 並行処理プロセスが、データに対する SHARE または UPDATE ロックをかけることができます。
- UPDATE
- 並行処理プロセスが、データに SHARE ロックをかけることができますが、 並行処理中のいずれのプロセスも UPDATE または EXCLUSIVE ロックをかけることはできません。
- EXCLUSIVE
- 並行処理プロセスは、データにロックをかけることはできません。
isolation-clause の制限:
- isolation-clause は、CREATE TABLE、または ALTER TABLE ステートメントではサポートされていません (SQLSTATE 42601)。
- isolation-clause は、トリガー呼び出し、参照整合性スキャン、または MQT 保守を生じさせる副選択または全選択で指定することはできません (SQLSTATE 42601)。
- 副選択または全選択が、オプション INHERIT ISOLATION LEVEL WITH LOCK REQUEST を指定して宣言されていない SQL 関数を参照している場合には、その副選択または全選択に lock-request-clause を含めることはできません (SQLSTATE 42601)。
- lock-request-clause が含まれる副選択または全選択は、MQT ルーティングに適格ではありません。
- SQL 関数、SQL メソッド、またはトリガーの本体中で、subselect または fullselect に isolation-clause が指定されている場合は、この節は無視され、警告が戻されます。
- 両方向スクロール・カーソルで使用される subselect または fullselect に isolation-clause が指定されている場合は、この節は無視され、警告が戻されます。
- isolation-clause と lock-request-clause のどちらも、共通表式で競合分離またはロック・インテントを生じさせるコンテキスト内では指定できません (SQLSTATE 42601)。 この制約事項は別名または基本表には適用されません。 以下の例では、
a
で分離の競合が発生し、エラーが返されます。- 表示:
create view a as (...); (select * from a with RR USE AND KEEP SHARE LOCKS) UNION ALL (select * from a with UR);
- 共通表式:
WITH a as (...) (select * from a with RR USE AND KEEP SHARE LOCKS) UNION ALL (select * from a with UR);
- 表示:
- isolation-clause は、XML コンテキストで指定できません (SQLSTATE 2200M)。
- カラム・オーガナイズ 表にアクセスするステートメントでは、分離を指定する WITH 節を副選択レベルで指定することはできません (SQLSTATE 42858)。
- ISOLATION LEVEL UR の動作は、カラム・オーガナイズ表と行オーガナイズ表で異なる場合があります。