-- 此处查询为空 验证 会话断开以后数据已经被截断,但表定义依然存在 select * from T; DROP TABLE T; -- 从新建立 会话临时表 create GLOBAL TEMPORARY table T ( C1 DATE, C2 TIMESTAMP(9) ) -- 提交时保留数据 即 在会话退出后执行 Truncate table ON COMMIT PRESERVE ROWS; -- 定义了创建事务级临时表 即 在 COMMITE 或者 RollBack 时 执行 Truncate table -- ON COMMIT DELETE ROWS insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211'); insert into t(c1,c2) values(to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'), to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')); select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t; COMMIT; -- 验证 提交后数据依旧被保留了 select * from T;
ORACLE临时表和SQLSERVER临时表异同
SQL SERVER临时表
也能够建立临时表。临时表与永久表类似,但临时表存储在 tempdb 中,当再也不使用时会自动删除。
有本地和全局两种类型的临时表,两者在名称、可见性和可用性上均不相同。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户链接是可见的;当用户从 Microsoft? SQL Server? 2000 实例断开链接时被删除。全局临时表的名称以数学符号 (##) 打头,建立后对任何用户都是可见的,当全部引用该表的用户从 SQL Server 断开链接时被删除。
例如,若是建立名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可使用该表,除非它已删除。若是建立名为 #employees 的本地临时表,只有您能对该表执行操做且在断开链接时该表删除。若是建立名为 ##employees 的全局临时表,数据表中的任何用户都可对该表执行操做。若是该表在您建立后没有其余用户使用,则当您断开链接时该表删除。若是该表在您建立后有其余用户使用,则 SQL Server在全部用户断开链接后删除该表
不一样:
1. SQL SERVER临时表是一种”内存表”,表是存储在内存中的.ORACLE临时表除非执行DROP TABLE,不然表定义会保留在数据字典中.
2. SQL SERVER临时表不存在相似ORACLE临时表 事务级别 上的功能.
3 SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表相似,可是在会话退出的时候,ORACLE不会删除表.
4 SQL SERVER的全局临时表(##) 是指多个链接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.
5 因为ORACLE不是一种 内存中的数据库. 因此若是ORACLE相似SQL SERVER 频繁的对临时表进行创建和删除,一定会影响性能.因此ORACLE会保留临时表的定义直到用户DROP TABLE.
6 在ORACLE中,若是须要多个用户共享一个表(相似SQL SERVER的全局临时表##).则能够利用永久表,而且在表中添加一些能够惟一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登录用户的惟一信息删除相应的表中的数据. 这种方法给ORACLE带来了必定量的负载.web
Mark http://blog.163.com/fox_tran/blog/static/20918020820127310918182/sql