2014-06-12 53 views
0

这是一个Teradata v14特定问题。将选择语句的结果存储在存储过程中

如何在存储过程中存储查询结果以供进一步处理。

选项我已经看过:

  • 挥发性临时表 - 但是,这需要先于存储 过程
  • 派生表创建 - 但只适用于一个查询
  • 的时间结果

结果需要在存储过程的持续时间内可用。

还有其他的选择吗?

更新2014年6月16日: 根据答案和评论似乎挥发性表是最好的答案。然而,然后我们尝试使用易失性表存储过程抱怨该表不存在。有没有解决的办法?

+0

你的意思是你想存储数据以便在你的proc中进一步处理吗?这是什么意思,在程序之前需要创建易失性表格?您只需在过程中声明该表。 – Andrew

+0

@Andrew:是的,我的意思是我想在存储过程中进行处理。存储过程可以同时执行多次。在存储过程中声明易失性表会抛出一个错误,指出该表不存在。 – L4zl0w

+1

不,挥发性表不是最好的答案。 Rob建议使用全局临时表。在你创建你的SP之前创建它**(你也可以在你的SP中创建它,并捕获“表已存在”的错误,但它不值得在源代码中的开销),在你的SP中你只需使用它像任何其他表一样,每个会话都会有它自己的物化实例。 – dnoeth

回答

1

您是否考虑过全球临时表?

表定义存储在DBC数据字典中,并在被SQL引用时为会话持续时间实例化。像易失性表一样,全局临时表也是会话特定的。与易失性表不同,全局临时表依赖于用户的临时空间而不是假脱机空间。

+0

谢谢,我有,但在存储过程内创建表似乎会抛出一个错误,指出表不存在。另外,如果存储过程同时启动多次,会发生什么情况? (不一定在同一个会话中) – L4zl0w

+1

如果我的回复不清楚,我表示歉意 - 在存储过程之外创建全局临时表。然后,您可以根据需要在存储过程中简单地引用它。 –

+2

GTT的每个“实例”都是特定于会话的,所以如果多个用户同时执行proc,他们将分别拥有一个单独的GTT实例。 – Andrew