投稿者

Training Sales Engineer at InterSystems Japan
記事 Mihoko Iijima · 12月 1, 2020 2m read

プログラム内でロック情報を取得する方法

これは、InterSystems FAQサイトの記事です。

プログラムでロック情報を取得するには以下2種類の方法があります。

  1. %SYS.LockQuery クラス を使用する方法
  2. 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について )