REQUEST ステートメントは、ロックIDまたはロックハンドルを指定して、指定されたロックモードのロックを取得するために使用します。
構文
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 に設定すると、トランザクションのコミット時またはロールバック時にロックが解放される。FALSE の場合は、ユーザーが明示的にロックを解放するか、セッションが切断されるまでロックは保持される。現在のバージョンでは、このパラメータは 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