当前位置: 首页 > 面试题库 >

SQL Server / Oracle:专用临时表

穆德海
2023-03-14
问题内容

在Oracle中,您可以使用以下方式创建临时表:

CREATE GLOBAL TEMPORARY TABLE temp_table (
    field1 NUMBER,
    field2 NUMBER
)
ON COMMIT DELETE ROWS;

…这可能很漂亮,因为这会创建一个所有人都可以看到的表,但是一个INSERT插入表中的数据仅对他或她可见。此外,该数据将在事务或会话结束时自动删除(取决于其声明),从而使其他所有人的临时数据不受损害。

但是,在SQL Server中,可以使用以下方式创建临时表:

CREATE TABLE #temp_table (field1 INT, field2 INT);

…据我所知,它在功能和功能上与Oracle的实现有本质的不同。该临时表仅对您可见,并且在使用后立即被删除(该表)。

SQL Server中是否有能力模仿如上所述的Oracle行为?还是使用临时数据的唯一方法是必须在每次工作迭代中重复创建临时表?


问题答案:

正如您所发现的,SQL Server和Oracle临时表根本不同。

在Oracle中,全局临时表是永久对象,用于存储特定于临时会话(或特定于事务)的数据。

在SQL Server中,临时表是存储临时数据的临时对象,其中#temp_tables存储会话本地数据,而##
temp_tables存储全局数据。(我从不需要SQL
Server全局临时表,也不知道它们解决了什么问题。)如果#temp_table是在存储过程中创建的,则在存储过程退出时将被删除。否则,它将在会话关闭时被删除。

不,确实没有办法使SQLServer模仿Oracle。您可以将普通表与额外的列一起使用,以存储会话ID。但是就减少日志记录而言,您将无法获得临时表的优势。您必须手动删除临时数据。并处理从过早退出的会话中清除的问题。

编辑: Oracle和SQL Server之间的另一个区别是SQL
Server允许DDL与其他语句包装在事务中。因此,如果需要将临时表用作较大事务的一部分,则该create table#table_name...语句将不会像create tableOracle中的语句那样隐式提交当前事务。



 类似资料:
  • 本文向大家介绍对比Oracle临时表和SQL Server临时表的不同点,包括了对比Oracle临时表和SQL Server临时表的不同点的使用技巧和注意事项,需要的朋友参考一下 Oracle数据库创建临时表的过程以及和SQL Server临时表的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧,希望能够对您有所帮助。 1.简介 Oracle数据库除了可以

  • 本文向大家介绍oracle 临时表详解及实例,包括了oracle 临时表详解及实例的使用技巧和注意事项,需要的朋友参考一下 在Oracle8i或以上版本中,可以创建以下两种临时表: 1。会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) ON COMMIT PRESERVE ROWS;  2。事务特有的临

  • 我有下面的DB对象和Java程序,当我尝试从Java调用Oracle的存储过程时,我无法得到临时表count.Am缺少一些东西,但我不知道wrong.Please帮助我找到错误code.When我调用的过程使用oracle语句直接在oracleSQL开发人员能够得到临时table.After每次调用插入过程它插入计数,并正确地在Oracle语句调用和Java.But当我尝试使用JDBC时,只有插入

  • 在Oracle中,需要在存储过程中多次重用查询结果。想知道临时表是推荐的方式还是其他方式... 首先,我基于某些输入参数创建一个结果集。 然后做一些检查,看看是否有任何结果集行出现在表1中。简单的连接和计数就足够了。如果算 为了获得最佳性能,应该使用临时表还是其他表? 谢谢

  • 问题内容: 我想在Oracle数据库中创建一个临时表 就像是 在SQL Server中 然后用选择语句填充它 是否有可能? 谢谢 问题答案: 是的,Oracle有临时表。这是描述它们的AskTom文章的链接,这是oracle的官方CREATE TABLE文档。 但是,在Oracle中,只有临时表中的 数据 是临时的。该表是其他会话可见的常规对象。在Oracle中频繁创建和删除临时表是一种不好的做法

  • 是一个使用spark 2注册的表。()缓存? 使用齐柏林飞艇,经过大量计算后,我在scala代码中注册了一个,然后在中我想访问它,并进一步过滤它。 它会使用内存缓存版本的表吗?还是每次都要重建?