如果您坚持不使用 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)
}
你可以让它更聪明,只打开一次会话对象,但我建议不要这样做。它可能看起来很花哨,但两年后你不会知道你在做什么。所以我建议使用建议的嵌入式 sql psr,它更具可读性(和可维护性)。