对比Oracle临时表和SQLServer临时表之间的差异

Oracle数据库创建临时表和与SQLServer临时表的对比是本文的主要内容。下面,让我们一起来学习这个部分,希望能对你有所帮助。

1。简介

除了保持永久表,Oracle数据库也可以创建一个临时表和临时表,临时表是用来保存一个会话的会话数据,或保存在一个事务中需要的数据。当会话退出或用户提交的提交和回滚回滚事务,临时表的数据自动清空,但结构和临时表的元数据也存储在用户数据字典。

2。详细介绍

Oracle临时表被划分为会话级临时表和事务级临时表。

会话级临时表是仅存在于会话生命周期中的临时表中的数据。当用户结束会话时,Oracle自动清除临时表中的数据。

事务级临时表是指临时表中仅存在于事务生命周期中的数据。当事务完成(提交或回滚)时,Oracle将自动清除临时表中的数据。

临时表中的数据只对当前会话有效。每个会话都有自己的临时数据,不能访问其他会话的临时表中的数据。因此,临时表不需要DML锁。

当会话结束(用户不能正常退出,用户无法退出Oracle实例崩溃)或事务结束时,Oracle执行截断语句来清空会话表上的临时表数据,但它不会在其他会话临时表中清空数据。

可以根据临时表索引临时表并创建视图。类似地,构建在临时表上的索引是临时的,只对当前会话或事务有效。临时表可能有触发器。

三.设置临时表

临时表的定义对所有会话会话都可见,但是表中的数据只对当前会话或事务有效。

建立的方法:


1)在提交删除行上定义了建立事务级临时表的方法。
创建全局临时表admin_work_area
(起始日期,
结束日期日期,
类char(20))
关于提交删除行;
例子:
已创建的全局临时表admin_work_area
2(StartDate DATE,
3结束日期日期,
4类char(20))
5关于提交删除行;
>创建表的SQL permernate(数字);
SQL >插入admin_work_area值(系统日期、系统日期,'temperary表);
SQL >插入permernate值(1);
提交;
SQL SELECT * FROM admin_work_area >;
SQL SELECT * FROM permernate >;


2)在提交保留行上定义了创建会话级临时表的方法。
创建全局临时表admin_work_area
(起始日期,
结束日期日期,
类char(20))
在提交保留行上;
例子:


会话1:


SQL >删除表admin_work_area;
已创建的全局临时表admin_work_area
2(StartDate DATE,
3结束日期日期,
4类char(20))
5关于提交保留行;
SQL >插入permernate值(2);
SQL >插入admin_work_area值(系统日期,系统日期,'session临时的);
提交;
SQL SELECT * FROM permernate >;

----------


SQL SELECT * FROM admin_work_area >;
开始日期结束日期类
----------------------------------------
17-1 03 17-1 03届临时



会话2:


SQL SELECT * FROM permernate >;

----------


SQL SELECT * FROM admin_work_area >;
别无选择。


会话2没有看到会话1中临时表的数据。

4 Oracle临时表与SQLServer临时表的异同

SQL Server也可以创建临时表,临时表类似于永久表,但临时表存储在tempdb和自动删除,当它不再被使用。

有两种类型的临时表,局部和全局,而这两者是不同的名称、可见性和可用性。与一个单一的数字符号的本地临时表的名称(#)他们;只有当前用户连接是可见的;当从微软SQL Server实例的用户时删除断开。一个全局临时表的数学符号名称(# #)开始创建任何用户都是可见的,当所有的指的是用户从SQL服务器断开连接删除表。

使用的SQL语句创建表的语句引用临时表table_name指定的名称:


创建表# mytemptable(可乐主关键字)
插入# mytemptable值(1)


如果本地临时表的存储过程或由多个用户同时创建,SQL Server必须能够区分由不同用户创建的表。为此,SQL Server添加数字后缀到每个本地临时表的表名内。存储在tempdb数据库中的临时表表格是由在CREATE TABLE语句中指定的表名和系统生成的数字后缀。允许附加后缀,表名table_name指定的本地临时表不能超过116个字符。

除非使用下拉表语句显式删除临时表,否则临时表将在系统退出其范围时自动删除:

当存储过程完成时,自动删除存储过程中创建的本地临时表。存储过程创建的表所执行的所有嵌套存储过程都可以引用此表。但是调用创建表的存储过程的过程不能引用此表。

在当前会话结束时,所有其他本地临时表都会自动删除。

全局临时表是在会议结束时创建的表和其他任务自动停止当参考停止。任务和表之间的关联是只保存在一个单一的Transact-SQL语句的寿命。换句话说,当全局临时表的会话被创建,最后一个Transact-SQL语句引用的表完成,并表将被自动删除。

例如,如果你创建一个表,称为员工,任何人都可以如果使用表的安全权限数据库中除非它已被删除的表。如果你创建本地临时表命名#员工,只有你可以在桌子上进行操作和删除表时,则断开连接。如果全局临时表命名# #员工创建,数据库中的任何用户都可以在桌子上进行操作。如果表格不是你创建后由其他用户使用,表被删除当您断开连接。如果表创建后由其他用户使用,SQL Server删除表后的所有用户断开连接。

在存储过程或触发器创建本地临时表不同,相同的名称创建临时表,在存储过程或触发器调用。如果查询是指临时表,有相同名字的两个临时表,它是没有定义的表来解析查询,嵌套存储过程可以创建一个同名的临时表的存储过程的调用创建的临时表。所有引用嵌套存储表的名称被解释为嵌套的过程中创建的表,如:


创建程序test2
作为
创建表# T(x主关键字)
插入# T值(2)
选择test2col = x从# T

创建程序test1
作为
创建表# T(x主关键字)
插入# T值(1)
选择test1col = x从# T
exec test2

创建表# T(x主关键字)
插入# T值(99)

执行测试




下面是结果集:


(1行(s)受影响)
test1col


(1行(s)受影响)
test2col




当创建一个局部或全局临时表,创建表的语法支持所有其他约束定义以外的外键约束。如果外键约束在临时表中指定的,该语句将返回警告信息,表明约束是不容忽视的,桌上仍将被创建,但它没有外键约束。临时表不能在外键约束引用。

考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或当多个存储过程或函数需要使用表值时,临时表是有用的。通常,表变量提供更有效的查询处理。

与甲骨文不同:

1。SQLServer临时表是一个内存表。存储在内存中的表is.oracle临时表。除非执行下拉表,否则表定义将保存在数据字典中。

2。SQLServer临时表没有类似于Oracle临时表的事务级别的函数。

3.sql服务器,本地临时表(#)和Oracle会话级临时表是相似的,但当会话退出,Oracle不会删除表。

4.sql服务器的全局临时表(# #)是指多个连接共享相同的内存。当没有指针指向内存区域时,SQLServer自动释放全局临时表。

5,因为Oracle不是内存中的数据库。如果Oracle像SQL Server,临时表的建立和删除将影响性能。因此,Oracle将保留临时表的定义,直到用户删除表为止。

6。在Oracle中,如果需要多个用户共享一个表(类似于SQL Server的全局临时表# #)。可以使用永久表,并添加一些用户可以唯一地标识表中的列。触发器和视图的使用。当用户退出时,根据登录,只使用信息用户删除表中相应的数据。这个方法对Oracle有一定的负载。

这里介绍了Oracle临时表和SQLServer临时表的不同点的相关知识。我希望这个介绍能给你带来回报!