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

Database Oracle临时表:将大型查询分解为多个步骤,database,oracle,oracle11g,temp-tables,Database,Oracle,Oracle11g,Temp Tables,在SQL Server领域工作了4年多之后,我已经在Oracle World工作了3周。现在我发现Oracle缺少本地临时表令人困惑 我经常负责将大量规范化数据的报告放在一起,以代替用于报告的数据仓库。我很快了解到,将所有逻辑塞进一个巨大的查询(即一个包含许多连接、子查询、相关子查询、联合等的查询)会导致糟糕的性能。正确地将流程分解为更小的步骤,并利用索引的临时表(您可以在过程或临时脚本中动态创建和更改这些临时表)通常会以指数级的速度加快 进入甲骨文。。。没有本地临时表。显然,如果没有被授予创建

在SQL Server领域工作了4年多之后,我已经在Oracle World工作了3周。现在我发现Oracle缺少本地临时表令人困惑

我经常负责将大量规范化数据的报告放在一起,以代替用于报告的数据仓库。我很快了解到,将所有逻辑塞进一个巨大的查询(即一个包含许多连接、子查询、相关子查询、联合等的查询)会导致糟糕的性能。正确地将流程分解为更小的步骤,并利用索引的临时表(您可以在过程或临时脚本中动态创建和更改这些临时表)通常会以指数级的速度加快

进入甲骨文。。。没有本地临时表。显然,如果没有被授予创建永久表的权限,我甚至无法创建全局临时表。我在谷歌上搜索了“oracle临时表权限”,返回的是一个论坛问题,被接受的答案以“正如已经指出的那样,想要有一个可以创建全局临时表而不是永久表的用户是非常不寻常的。我很难想象这样的场景会有什么意义。“这正是我可以在我们的prod环境中使用的。我的SQL Server思维已经崩溃了

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


我肯定错过了什么…

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

我喜欢你处理复杂查询的方法。关于临时表。可能很有趣?我怀疑你可以像以前一样工作?可能是物化视图?如果你稍微向前看一看高级oracle,你会发现你可以在内存中玩很多游戏。你可以创建记录、对象来临时保存数据和数据中间查询结果集。谢谢你的建议。我向“问汤姆”提出了这个问题“伙计们:。他们的反馈并没有给我很大的鼓励,但我提供的例子应该清楚地说明我所说的那种情况。最后,似乎没有一个可行的替代GTT的方案,也没有“设置GTT”所需的提升权限。