SQL を使用しないことを主張する場合は、次の行に沿って何かを行う必要があります。
Method GetSEssionIdByUserName(UserName as %String) As Sample.Session [ Private ]
{
s c=$O(^Sample.SessionD("")),f=""
while ((f="") && (c'="")){
s p=##class(Sample.Session).%OpenId(c)
if $isobject(p){
s:p.UserName=UserName f=c
}
//alternatively if you're sure about the global structure, something like this:
//assume the Username is stored at position 3 for a sec:
//s:$LG(^Sample.SessionD(c),3)=UserName f=c
s c=$O(^Sample.SessionD(c))
}
q ##class(Sample.Session).%OpenId(f)
}
さらに賢くして、セッション オブジェクトを 1 回だけ開くこともできますが、今後は、この方法を使用しないことをお勧めします。派手に見えるかもしれませんが、2年後には自分が何をしていたのか分からなくなります。したがって、提案された埋め込みSQL psrを使用することをお勧めします。これは、はるかに読みやすい(そして保守しやすい)ものです。