【问题标题】:Sql In-Memory object which exists in Microsoft SQL and ORACLEMicrosoft SQL 和 ORACLE 中存在的 Sql In-Memory 对象
【发布时间】:2012-03-06 22:57:15
【问题描述】:

是否存在任何 In-Memory 对象,如 Microsoft SQL Server 临时表也可用于 Oracle?

更新

我询问了临时表,因为我必须复制 X 数据集并将它们再次插入同一个表中,并对复制的数据集的字段进行一些更新。单独的复制操作会导致主要约束异常,因此我必须执行 Insert Into(Select... 到内存对象中,在那里进行更新,然后将所有更改数据集写回到原始表中。什么更适合临时表还是表变量?考虑我使用 ADO.NET。因此,由于语言差异,执行的一条语句必须适用于 Oracle 和 MS Sql Server,无一例外。

【问题讨论】:

  • SQL Server 中的临时表不在内存中。它们存在于tempdb 数据库中。甚至在内存压力下的表变量也可能被推送到tempdb 数据库。事实上,表变量的模式总是在tempdb中创建的。
  • @Joe 只要我可以在不是我的原始表的表中做临时工作,tempdb 数据库就可以了。

标签: oracle temp-tables


【解决方案1】:

是的。甲骨文也有temporary tables。或者您可能在问Table variables(很难从您的问题中看出)?他们的回答也是yes

仅供参考:SQL 中的临时表 aren't guaranteed to be "in memory"

更新:回答您添加到 OP 的新问题。 使用最适合您的代码的方法。我认为无论您使用表变量还是“真正的”临时表,它都没有太大的不同。一个更好的问题是使用全局临时表还是本地临时表。在这种情况下,除非您别无选择,否则我会说避免使用全局变量。

【讨论】:

  • 说清楚。在 Oracle + Sql Server 中创建/使用临时表的语法是否相同? Andy Skirrow(帖子在底部)说我必须在安装数据库时设置临时表?我不想那样。
  • 不,语法不一样。 Oracle create global temporary table table_name ... Sql Server create table #table_name .... Oracle 临时表是保存具有会话可见性的临时数据的永久对象。 (全局临时表是全局的,但它保存的数据不是)其中 SQL Server 临时表是临时对象,其中对象范围和数据既可以是本地的,也可以是全局的。
  • 其实你的回答是对我的问题的一个解决方案,因为语法不同,所以不要使用临时表。
【解决方案2】:

Oracle 有临时表,但您必须在安装时创建它们:

  1. 安装数据库时使用CREATE TEMPORARY TABLE 创建表
  2. 每个用户只能看到自己的数据,当他们结束会话或提交事务时,这些数据会丢失,因此您可以将其用于临时处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2017-01-03
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多