Stored procedures 将select语句的结果存储在存储过程中

Stored procedures 将select语句的结果存储在存储过程中,stored-procedures,teradata,Stored Procedures,Teradata,这是一个Teradata v14特定的问题 如何在存储过程中存储查询结果以供进一步处理 我研究过的选项: 易失性临时表-但需要在存储之前创建 程序 派生表-但它只在一个查询期间保存结果 结果需要在存储过程期间可用 还有其他选择吗 2014年6月16日更新: 从答案和评论来看,volatile表似乎是最好的答案。然而,我们尝试使用volatile表,存储过程抱怨该表不存在。有办法解决这个问题吗?您考虑过全局临时表吗 表定义存储在DBC数据字典中,并在SQL引用时在会话期间实例化。与易失性表一样

这是一个Teradata v14特定的问题

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

我研究过的选项:

  • 易失性临时表-但需要在存储之前创建 程序
  • 派生表-但它只在一个查询期间保存结果
结果需要在存储过程期间可用

还有其他选择吗

2014年6月16日更新:
从答案和评论来看,volatile表似乎是最好的答案。然而,我们尝试使用volatile表,存储过程抱怨该表不存在。有办法解决这个问题吗?

您考虑过全局临时表吗


表定义存储在DBC数据字典中,并在SQL引用时在会话期间实例化。与易失性表一样,全局临时表是特定于会话的。与volatile表不同,全局临时表依赖于用户的临时空间而不是spool空间。

您的意思是要在进程内存储数据以供进一步处理吗?在执行该过程之前,需要创建volatile表是什么意思?您只需要在过程中声明表。@安德鲁:是的,我的意思是我想在存储过程中进行处理。存储过程可以同时执行多次。在存储过程中声明volatile表会抛出一个错误,指出该表不存在。不,volatile表不是最佳答案。按照Rob的建议使用全局临时表。在创建SP之前创建它一次(您也可以从SP中创建它,并捕获“表已存在”错误,但不值得在源代码中增加开销),在SP中,您只需像使用其他表一样使用它,每个会话都将有自己的物化实例。@dnoeth:谢谢,全局临时表是否存在于架构内或服务器上的所有架构中?为什么GTT比永久表更好?GTT的定义存储在数据库中,就像永久表一样。但是每个永久表都需要一个唯一的名称,而每个会话可以将不同的数据插入到同一个GTT中。您不必删除该表,会话版本的GTT在注销时会自动删除,就像一个易失性表一样。谢谢,我已经删除了,但是从存储过程中创建表似乎会抛出一个错误,表明该表不存在。另外,如果存储过程同时启动了好几次,会发生什么情况?(不一定在同一个会话中)如果我的回答不清楚,我很抱歉-在存储过程之外创建全局临时表。然后,您可以根据需要在存储过程中简单地引用它。GTT的每个“实例”都是特定于会话的,因此如果多个用户同时执行该过程,那么他们每个人都将有一个单独的GTT实例。