プログラム内でロック情報を取得する方法
これは、InterSystems FAQサイトの記事です。
プログラムでロック情報を取得するには以下2種類の方法があります。
- %SYS.LockQuery クラス を使用する方法
- SSVN(構造化システム変数)を使用する方法
1. %SYS.LockQuery クラス を使用する方法
#dim rset As %SQL.StatementResult
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List")
set rset=stmt.%Execute()
while rset.%Next() {
write !,rset.%Get("FullReference")
write !,rset.%Get("Owner")
write !,rset.%Get("DelKey"),!
}より詳細なロック情報を取得する場合には List クエリではなく Detail クエリを使用します。
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","List") を
set st=stmt.%PrepareClassQuery("%SYS.LockQuery","Detail") に変更します。
その他 条件を指定してロック情報を取得する事が出来ます。詳細についてはクラスリファレンス(%SYS.LockQuery)【IRIS】をご参照ください。
(クラスリファレンス(%SYS.LockQuery))
2. SSVN(構造化システム変数)を使用する方法
以下サンプルは、現在のネームスペースにあるロックを検索し表示します。またローカル変数 LOCKET の配列に検索で見つかったロック名を設定しています。
SET lname=""
FOR I=1:1 {
SET lname=$ORDER(^$LOCK(lname))
IF lname="" { QUIT }
SET LOCKET(I)=lname
WRITE !,"the lock name is: ",lname
}
WRITE !,"All lock names listed"
QUIT
詳細は、^$LOCKについて【IRIS】のドキュメントをご参照ください。
(^$LOCKについて )
ディスカッション (0)1