REQUEST ステートメントは、ロックIDまたはLockハンドルを指定して、指定されたロックモードのロックを取得するために使用されます。
構文
DBMS_LOCK.REQUEST(
id IN INTEGER ||
lockhandle IN VARCHAR2,
lockmode IN INTEGER DEFAULT X_MODE,
timeout IN INTEGER DEFAULT MAXWAIT,
release_on_commit IN BOOLEAN DEFAULT FALSE)
RETURN INTEGER;
パラメータの説明
| パラメータ |
説明 |
| id || lockhandle |
ロックIDまたはLockハンドル。 |
| lockmode |
取得するロックモード。 |
| timeout |
ロック競合が発生した場合に待機する時間(単位:秒)。タイムアウト後、1を返します。 |
| release_on_commit |
TRUE に設定すると、トランザクションのコミットまたはロールバック時にロックが解放されます。それ以外の場合は、ユーザーが手動で解放するか、セッションが切断されるまで保持されます。現在のバージョンでは、このパラメータは TRUE および FALSE をサポートしています。デフォルトは FALSE です。relase_on_commit = TRUE の場合、RELEASEサブルーチンを使用してロックを解放することは現在サポートされていません。 |
戻り値
| 返り値 |
説明 |
| 0 |
成功 |
| 1 |
タイムアウト |
| 2 |
デッドロック |
| 3 |
パラメータエラー |
| 4 |
すでにロックがかけられている |
| 5 |
無効なLockハンドル |
例
obclient> DELIMITER /
obclient> DECLARE
my_lockname VARCHAR2(100) :='test01';
my_lockhandle VARCHAR2(200);
my_lock_output NUMBER;
BEGIN
DBMS_LOCK.ALLOCATE_UNIQUE(lockname => my_lockname,lockhandle => my_lockhandle);
my_lock_output := DBMS_LOCK.REQUEST(my_lockhandle,6, 60, FALSE);
END;/
Query OK, 1 row affected