Methods 如何在系统间缓存中创建返回%SQLQuery的ClassMethod?

Methods 如何在系统间缓存中创建返回%SQLQuery的ClassMethod?,methods,intersystems-cache,Methods,Intersystems Cache,下面是一个查询方法: Query getSample() As %SQLQuery [ SqlProc ] { SELECT * FROM TEST.xSample } getSample查询将由VB中的方法调用,并将其分配给DataTable类型的对象 一个ClassMethod怎么能返回可以分配给DataTable类型对象的同一个%SQLQuery?为什么要使用ClassMethod这样的查询?我不知道从ClassMethod返回这个值是否容易。基于SQL的接口能够处理结果集,包括

下面是一个查询方法:

Query getSample() As %SQLQuery [ SqlProc ]
{
    SELECT * FROM TEST.xSample
}
getSample查询将由VB中的方法调用,并将其分配给DataTable类型的对象


一个ClassMethod怎么能返回可以分配给DataTable类型对象的同一个%SQLQuery?

为什么要使用ClassMethod这样的查询?

我不知道从ClassMethod返回这个值是否容易。基于SQL的接口能够处理结果集,包括理解调用代码需要迭代结果。如果结果的数量非常大,这是必要的

因此,我认为您需要考虑如何处理结果。您可以使用
%SQL.Statement
返回类型为
%SQL.StatementResult
的结果集,但由于结果集是动态生成的,并且仍然需要调用方对结果进行任何交互,因此您的界面不太清晰。可能看起来像这样:

ClassMethod GetSample() As %SQL.StatementResult
{
  // Note - this code uses %ExecDirect() as a shortcut.
  // For more control over the resultset, instantiate a %SQL.Statement instance, and then call %Prepare() and %Execute()
  Set tResultSet = ##class(%SQL.Statement).%ExecDirect(,"SELECT * FROM Test.xSample")
  Quit tResultSet
}

您还可以返回一个对象列表,但如果表很大,则可能会占用大量内存,并且调用代码仍需要迭代结果并知道存在哪些属性。您可能想解释一下,为了得到更好的答案,您实际上需要对结果做些什么。

感谢您的见解。我最初的想法是,在ClassMethod中有一组结果集,处理一些记录,然后调用另一个结果集,然后返回它。这种方法还有其他解决方案吗?除了进行SQL事务之外?一个简单的问题。。为什么ClassMethod返回一个整数值,而不是结果集本身?22@%sqlcq.SAMPLE.cls4Inside缓存返回值只是对resultset对象的引用,因此直接从SQL调用classmethod将返回此引用。我想我不明白您希望如何处理返回的结果集。