Oracle临时表:将大型查询分解为多个步骤

时间:2016-09-08 00:03:16

标签: database oracle oracle11g temp-tables

在SQL Server Land工作超过4年后,我在Oracle World工作了3周。现在我发现Oracle缺乏本地临时表令人困惑。

代替数据仓库进行报告我经常负责将大量规范化数据的报告整理在一起。我很快就知道将所有逻辑塞进一个巨大的查询(即一个有很多连接,子查询,相关子查询,联合等)是一个糟糕表现的秘诀。正确地将流程分解为更小的步骤并利用索引临时表(您可以在过程或临时脚本中动态创建和更改)通常会指数级更快。

输入Oracle ...没有本地临时表。我显然甚至无法创建一个全局临时表,也没有被授予创建永久表的权限。我用Google搜索了“oracle临时表权限”并且返回的first link是一个论坛问题,其中接受的答案以“开头”正如已经指出的那样,不寻常拥有一个可以创建全局临时表而不是永久表的用户。我很难想象一个有意义的场景。“这正是我在prod环境中可以使用的。我的SQL Server头脑很乱。

我几乎可以接受只使用全局临时表,但在Oracle中以这种方式使用它们真的很不寻常吗?如果有的话,我可以做什么来实现某种类似的逐步逻辑而不使用临时表?如何在ad-hoc脚本中保存并稍后重用类似于索引数据集的内容?我显然正在寻找除子查询或CTE之外的其他东西。

我一定错过了什么......

1 个答案:

答案 0 :(得分:0)

不幸的是,我们没有这样的特权。但是作为解决方法,您可以撤销永久表空间上的任何配额,那么用户就无法创建任何永久表。当然,11g中的延迟段创建功能用户可以创建表但是他们不能插入任何行。因为临时表使用临时表空间,所以它们不会有任何问题。 穆赫辛