如何从 CFC 中的存储过程 return 获得多个结果?
How to return multiple results from a stored procedure in a CFC?
我在这里看到了一个相同的问题returning multiple stored procedure result sets from a cfc,但我找不到好的解决方案。
我有一个 SP returns 大约 8 results/queries。我想将查询输出到可以由其他函数返回的变量中。这就是我的意思:
<cffunction name="AllOrders" returntype="query">
<cfstoredproc procedure="SELAllOrders" datasource="mydb">
<cfprocresult name="rsClosedOrders" resultset="1">
<cfprocresult name="rsOpenOrders" resultset="2">
<cfprocresult name="rsPendingOrders" resultset="3">
<cfprocresult name="rsPaidOrders" resultset="4">
</cfstoredproc>
</cffunction>
<!--- GET A RESULT TO RETURN TO CALLING PAGE --->
<cffunction name="GetClosedOrders" returntype="query">
<!--- How do I return the result/query from the above CFC named rsClosedOrders from here? ---!>
<cfreturn rsClosedOrders/>
</cfunction>
如何从 AllOrders()
函数中得到 rsClosedOrders
结果并提供给其他方法使用,在本例中为 GetClosedOrders()
?
有几种方法可以解决这个问题。
您可以重构存储过程,使其不返回 8 个不同的结果集,然后只需调用您需要的存储过程。
您可以将 returns 全部 8 套的 SP 称为 SP,然后只使用您需要的一套,如下所示:
<cffunction name="getClosedOrders" returntype="query">
<cfstoredproc procedure="SELAllOrders" datasource="mydb">
<cfprocresult name="rsClosedOrders" resultset="1">
</cfstoredproc>
<cfreturn rsClosedOrders>
</cffunction>
基本上是创建一个函数,该函数仅 returns 八个结果集中的一个结果集。但是,这是非常低效的。
这基本上就是 Leigh 在上面所描述的内容,并且应用了适当的 var 范围。请注意,这是您要求的,但这不是一种非常有效的方法。我会将存储的过程分解为单独的过程,或者只是将其删除并将查询直接放入您的代码中。
<cffunction name="AllOrders" returntype="struct">
<cfset local.resultSets = {}>
<cfstoredproc procedure="SELAllOrders" datasource="mydb">
<cfprocresult name="local.resultSets.rsClosedOrders" resultset="1">
<cfprocresult name="local.resultSets.rsOpenOrders" resultset="2">
<cfprocresult name="local.resultSets.rsPendingOrders" resultset="3">
<cfprocresult name="local.resultSets.rsPaidOrders" resultset="4">
</cfstoredproc>
<cfreturn local.resultSets>
</cffunction>
<cffunction name="GetClosedOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsClosedOrders/>
</cfunction>
<cffunction name="GetOpenOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsOpenOrders/>
</cfunction>
<cffunction name="GetPendingOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsPendingOrders/>
</cfunction>
<cffunction name="GetPaidOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsPaidOrders/>
</cfunction>
我在这里看到了一个相同的问题returning multiple stored procedure result sets from a cfc,但我找不到好的解决方案。
我有一个 SP returns 大约 8 results/queries。我想将查询输出到可以由其他函数返回的变量中。这就是我的意思:
<cffunction name="AllOrders" returntype="query">
<cfstoredproc procedure="SELAllOrders" datasource="mydb">
<cfprocresult name="rsClosedOrders" resultset="1">
<cfprocresult name="rsOpenOrders" resultset="2">
<cfprocresult name="rsPendingOrders" resultset="3">
<cfprocresult name="rsPaidOrders" resultset="4">
</cfstoredproc>
</cffunction>
<!--- GET A RESULT TO RETURN TO CALLING PAGE --->
<cffunction name="GetClosedOrders" returntype="query">
<!--- How do I return the result/query from the above CFC named rsClosedOrders from here? ---!>
<cfreturn rsClosedOrders/>
</cfunction>
如何从 AllOrders()
函数中得到 rsClosedOrders
结果并提供给其他方法使用,在本例中为 GetClosedOrders()
?
有几种方法可以解决这个问题。
您可以重构存储过程,使其不返回 8 个不同的结果集,然后只需调用您需要的存储过程。
您可以将 returns 全部 8 套的 SP 称为 SP,然后只使用您需要的一套,如下所示:
<cffunction name="getClosedOrders" returntype="query"> <cfstoredproc procedure="SELAllOrders" datasource="mydb"> <cfprocresult name="rsClosedOrders" resultset="1"> </cfstoredproc> <cfreturn rsClosedOrders> </cffunction>
基本上是创建一个函数,该函数仅 returns 八个结果集中的一个结果集。但是,这是非常低效的。
这基本上就是 Leigh 在上面所描述的内容,并且应用了适当的 var 范围。请注意,这是您要求的,但这不是一种非常有效的方法。我会将存储的过程分解为单独的过程,或者只是将其删除并将查询直接放入您的代码中。
<cffunction name="AllOrders" returntype="struct">
<cfset local.resultSets = {}>
<cfstoredproc procedure="SELAllOrders" datasource="mydb">
<cfprocresult name="local.resultSets.rsClosedOrders" resultset="1">
<cfprocresult name="local.resultSets.rsOpenOrders" resultset="2">
<cfprocresult name="local.resultSets.rsPendingOrders" resultset="3">
<cfprocresult name="local.resultSets.rsPaidOrders" resultset="4">
</cfstoredproc>
<cfreturn local.resultSets>
</cffunction>
<cffunction name="GetClosedOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsClosedOrders/>
</cfunction>
<cffunction name="GetOpenOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsOpenOrders/>
</cfunction>
<cffunction name="GetPendingOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsPendingOrders/>
</cfunction>
<cffunction name="GetPaidOrders" returntype="query">
<cfset local.resultSets = AllOrders()>
<cfreturn local.resultSets.rsPaidOrders/>
</cfunction>