【发布时间】:2014-08-02 20:53:54
【问题描述】:
这是一个 Teradata v14 特定问题。
如何将查询结果存储在存储过程中以供进一步处理。
我看过的选项:
- volatile 临时表 - 但需要在存储之前创建 程序
- 派生表 - 但它只保存一个查询期间的结果
结果需要在存储过程期间可用。
还有其他选择吗?
2014 年 6 月 16 日更新: 根据答案和 cmets,似乎 volatile table 是最好的答案。但是,然后我们尝试使用 volatile 表,存储过程抱怨该表不存在。有没有办法解决这个问题?
【问题讨论】:
-
你的意思是你想在你的 proc 中存储数据以供进一步处理?您是什么意思需要在该过程之前创建易失性表?您只需在过程中声明表即可。
-
@Andrew:是的,我的意思是我想在存储过程中进行处理。存储过程可以同时执行多次。在存储过程中声明 volatile 表会引发错误,指出该表不存在。
-
不,易失性表不是最佳答案。按照 Rob 的建议使用全局临时表。在您创建您的 SP 之前创建它一次(您也可以在您的 SP 中创建它并捕获“表已存在”错误,但它不值得源代码中的开销),在您的 SP 中只需像使用任何其他表一样使用它,每个会话都会有自己的物化实例。
-
@dnoeth:谢谢,全局临时表是存在于模式中还是存在于服务器上的所有模式中?为什么它比永久桌子好?
-
GTT 的定义存储在数据库中,就像永久表一样。但是每个永久表都需要一个唯一的名称,而每个会话可以将不同的数据插入到同一个 GTT 中。而且您不必删除表,会话的 GTT 版本在注销期间会像易失性表一样自动删除。
标签: stored-procedures teradata