【问题标题】:Global Temporary Table VS Pipelining which one is better and why?Global Temporary Table VS Pipelining 哪个更好,为什么?
【发布时间】:2013-12-17 15:58:26
【问题描述】:

我想从函数返回记录。这些记录应放置在全局可访问的表中。为了在这个全局可访问的表中插入记录,我们有两个选择,我们将使用管道衬里或批量收集到该表中。我应该使用什么以及为什么???

问这个问题的原因是 在全局临时表中,我们只是批量收集到TEM_TABLE

但在流水线

我们循环遍历查询中的所有条目。

【问题讨论】:

  • 你到底想达到什么目的?
  • 我必须在函数中使用它们,但我不知道应该使用哪个以及为什么?
  • 这就像问“我应该在哪个平台上?”'而不指定您的目的地。然后当有人问“你要去哪里”时,你会说“我应该坐火车”。
  • 最好的方法是直接使用 SQL insert into ... select ... from
  • 这似乎不太可能。请发布您认为不起作用的代码。

标签: oracle plsql


【解决方案1】:

全局临时表是物理对象。这意味着我们将它们写入磁盘。这都是开销,因此它们仅在我们想要在会话中多次访问的大量或有数据时才有用。

用于查询条件数据的流水线函数程序单元。正常用途是将数据从一种形状转换为另一种形状,例如将一条记录拆分为多个记录,反之亦然。当数据具有单个查询的生命周期时,我们可以使用流水线函数。

这些不是对立的结构。编写一个从全局临时表中读取记录的流水线函数或使用 PLF 的输出填充 GTT 是完全可以想象的。

【讨论】:

    【解决方案2】:

    全局临时表:
    一种常见的用法是当您有一个特定用户进行OLAP 操作时,松散地说是报告。
    这些报告使用大量汇总数据,并且这些信息在多个报告中重复使用。因此,最好缓存此会话的信息,这可以通过使用临时表来完成。

    表值函数(管道):
    是参数视图的等价概念,在oracle中。 当您有一个带有子查询的查询并且在子查询 where 子句中您需要指定参数时,指定 view 的 where 子句将无济于事。 samples 可能是help

    【讨论】:

    • 在您的 OLAP 报告场景中,您不是在描述物化视图更擅长的事情吗?
    • 是的,这将是一个选项,但临时表将以临时方式保存数据,但物化视图将是静态数据保存器。用法也会不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2011-01-09
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多