Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

UNLOCK

テーブルをアンロックします。

Synopsis

UNLOCK [TABLE] tablename IN EXCLUSIVE MODE [IMMEDIATE]
UNLOCK [TABLE] tablename IN SHARE MODE [IMMEDIATE]

引数

tablename アンロック対象のテーブルの名前。tablename は既存のテーブルである必要があります。
IN EXCLUSIVE MODE と IN SHARE MODE キーワード句 IN EXCLUSIVE MODE は、通常の Caché ロックを解放します。キーワード句 IN SHARE MODE は、Caché レベルの共有ロックを解放します。
IMMEDIATE オプション — 指定しない場合、Caché は現在のトランザクションの終了時にロックを解放します。指定した場合、Caché はロックを即時に解放します。

説明

UNLOCK コマンドは、LOCK コマンドがロックした SQL テーブルをアンロックします。このテーブルは、ユーザが適切な特権を持つ既存のテーブルである必要があります。tablename が一時テーブルである場合、コマンドは正常に完了しますが、処理は何も実行されません。tablename がビューである場合、SQLCODE -400 エラーが発生してコマンドが失敗します。

UNLOCKUNLOCK TABLE は同義語です。

UNLOCK コマンドは LOCK 操作を取り消します。UNLOCK コマンドは、適用されているロックがない場合も正常に完了します。LOCK を使用してテーブルを複数回ロックすることができますが、明示的にロックした回数と同じ回数だけ明示的に UNLOCK を適用する必要があります。

特権

UNLOCK コマンドは特権を必要とする操作です。UNLOCK IN SHARE MODE を使用する前に、指定されたテーブルに対する SELECT 特権をプロセスに付与しておく必要があります。UNLOCK IN EXCLUSIVE MODE を使用する前に、指定されたテーブルに対する INSERT、UPDATE、および DELETE 特権をプロセスに付与しておく必要があります。IN EXCLUSIVE MODE では、テーブルの 1 つ以上のフィールドに対する INSERT、または UPDATE 特権が必要です。特権がない場合は、SQLCODE -99 エラー (特権違反) が返されます。%CHECKPRIV コマンドを呼び出すことにより、現在のユーザが必要な特権を持っているかどうかを確認できます。$SYSTEM.SQL.CheckPriv()Opens in a new tab メソッドを呼び出すことにより、指定のユーザが必要なテーブルレベルの特権を持っているかどうかを確認できます。特権の割り当てについては、"GRANT" コマンドを参照してください。

存在しないテーブル

実在しないテーブルをアンロックしようとすると、コンパイル・エラーが発生して UNLOCK が失敗します。

以下の埋め込み SQL の例は、テーブルを作成してロックしてから、アンロックします。

  NEW SQLCODE,%msg
  &sql(CREATE TABLE mytest (
      ID NUMBER(12,0) NOT NULL,
      CREATE_DATE DATE DEFAULT CURRENT_TIMESTAMP(2),
      WORK_START DATE DEFAULT SYSDATE) )
  IF SQLCODE=0 { WRITE !,"Table created" }
  ELSE { WRITE !,"CREATE TABLE error: ",SQLCODE
         QUIT }
  NEW SQLCODE,%msg
  &sql(LOCK mytest IN EXCLUSIVE MODE) 
  IF SQLCODE=0 { WRITE !,"Table locked" }
  ELSEIF SQLCODE=-110 { WRITE !,"Table is locked by another process",!,%msg }
  ELSE { WRITE !,"Unexpected LOCK error: ",SQLCODE,!,%msg }
  &sql(UNLOCK mytest IN EXCLUSIVE MODE) 
  IF SQLCODE=0 { WRITE !,"Table unlocked" }
  ELSE { WRITE !,"Unexpected UNLOCK error: ",SQLCODE,!,%msg }

関連項目

FeedbackOpens in a new tab