ORACLE機能

[ORACLE] 排他ロックを行う(for update nowait)

投稿日:

排他ロックをかけるには、for update または、for update nowaitを使います。

構文

排他ロックには、ロック時に待つパターンと待たないパターンがあります

(構文 - ロックされていた場合は即時排他エラーとする場合)
<SELECT文> for update nowait
(構文 - ロックされていた場合はロックが解除されるまで待機する場合)
<SELECT文> for update

サンプル

例)排他ロックを掛けて検索する(ロック中の場合は待つ)

SQL*Plus
SQL> select * from m_user where user_cd = '001' for update; USER_CD USER_NM --------- --------------- 001 xxx

この場合、対象データがロック済みの場合は待ち状態になります。

例)排他ロックを掛けて検索する(ロック中の場合は即エラーとする)

SQL*Plus
SQL> select * from m_user where user_cd = '001' for update nowait; USER_CD USER_NM --------- --------------- 001 xxx

この場合、対象データがロック済みの場合は即エラーとなります。

※ロック済みの場合は以下のような結果となります。

SQL> select * from m_user where user_cd = '001' for update nowait; * 行1でエラーが発生しました。: ORA-00054: リソース・ビジー。NOWAITが指定されているか、タイムアウトしました

解説

  • for update(for update nowait)で掛けたロックを解除するには、commitまたはrollbackを実行すれば解除できます。

スポンサーリンク

スポンサーリンク

-ORACLE機能

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ORACLE

[SQL*Plus] OSのコマンドを実行する(host)

SQL*PlusからOSのコマンドを実行するには、hostを使用します。 構文 (OSのコマンドを実行する) host ...
ORACLE

[データディクショナリ] オブジェクトの情報を取得する

オブジェクトの情報を参照するには、 OBJECTSデータディクショナリビューを参照します。 オブジェクトとは、テーブルと ...
ORACLE

[SQL*Plus] ヘッダー行が挿入される間隔を変更する(set pagesize)

ヘッダー行が挿入される間隔を変更するには、pagesizeを設定します。 サンプル 例)ヘッダー行を挿入する間隔を100 ...
ORACLE

[ORACLE] 列にデフォルト値を設定/削除する

列にデフォルト値を設定/削除するには、ALTER TABLE~MODIFY句を使用します。 構文 (列にデフォルト値を設 ...
ORACLE

[PL/SQL] 条件値がnullでない場合のみ検索条件に含める

条件値がnullの場合は検索条件とせず、nullでない場合のみ検索条件とするサンプルです。 サンプルコード 例)valが ...

スポンサーリンク