避免频繁调用 Oracle 过程中的相同视图

Avoiding frequent call to same view inside a Oracle procedure

我有一个 oracle 视图 returns 来自不同表的 500 万条记录,我使用这个视图通过单个过程插入到不同的表中,在这个过程中我多次使用它,这影响了性能,有什么方法可以让我们查询一次视图,然后我可以在多个地方使用它?

视图是存储的查询;本身,它不包含任何数据。如果它的代码很复杂并且从几个 table 中获取数据,使用不同的条件、聚合等等,它可能需要一些时间来访问数据。

在您的情况下,全局(或私有;取决于您使用的 Oracle 版本)临时 table (GTT) 可能会有所帮助。

  • 你创建一次
  • 在过程开始时,将视图中的数据插入其中
  • 程序的其余部分将适用于那些准备好的数据
  • 一旦会话(或交易;取决于您设置 GTT 的方式)结束,来自 table 的数据将丢失
    • table 可以在您下次 运行 程序时重复使用