記事
· 2020年12月1日 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について )

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください