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 エラーが発生してコマンドが失敗します。
UNLOCK と UNLOCK 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 }
関連項目
-
"Caché エラー・リファレンス" にリストされた SQLCODE エラー・メッセージ