プログラム内でロック情報を取得する方法
これは、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について )