但行好事
莫论前程❤

Oracle学习笔记—-demp临时表用法

ORACLE的临时表在应用系统中有很大的作用,它可以让用户只能够操作各自的数据中而互不干扰,不用担心会破坏或影响其他SESSION/TRANSACTION的数据,这也是数据安全的一种解决方法。 和一些其他的关系型数据库的临时表不同,当你在oracle数据库中创建一个临时表时,您将创建一个静态表的定义。临时表在数据字典中描述的是一种持久性对象,但是是空的,直到您的会话数据插入到表中。

临时表分为SESSIONTRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而TRANSACTION级的临时表数据在TRANSACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除TRANSACTION临时表数据。

两种临时表的语法:

create global temporary table 临时表名 on commit preserve|delete rows  

# 用preserve时就是SESSION级的临时表   preserve(维持)
# 用delete就是TRANSACTION级的临时表 

一、SESSION级临时表

  • 1、建立临时表
create global temporary table temp_tableName(
    col_a varchar2(30),
    col_b varchar2(30)
) on commit preserve rows 
  • 2、插入数据
insert into temp_tableName values('test1 session table','test2 session table')  
  • 3、提交
commit;
  • 4、查询数据
select * from temp_tableName

可以看到数据’test1 session table,test2 session table’记录还在。  结束SESSION,重新登录,再查询数据select * from temp_tableName,这时候记录已不存在,因为系统在结束SESSION时自动清除记录

二、TRANSACTION级临时表

  • 1、建立临时表
create global temporary table temp_tableName(
    col_a varchar2(30),
    col_b varchar2(30)
) on commit delete rows  
  • 2、插入数据
insert into temp_tableName values('test1 transaction table','test2 transaction table')  
  • 3、提交
commit;
  • 4、查询数据
select * from temp_tableName

这时候可以看到刚才插入的记录’test1 transaction table,test2 transaction table’已不存在了;同样,如果不提交而直接结束SESSION,重新登录记录也不存在

三、ORACLE临时表和SQLSERVER临时表相同点

SQL SERVER临时表也可以创建临时表。临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft? SQL Server? 2000 实例断开连接时被删除。全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为#employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表

四、ORACLE临时表和SQLSERVER临时表不同点

  • SQL SERVER临时表是一种”内存表”,表是存储在内存中的. ORACLE临时表除非执行DROP TABLE,否则表定义会保留在数据字典中.
  • SQL SERVER临时表不存在类似ORACLE临时表事务级别上的功能.
  • SQL SERVER本地临时表(#) 与 ORACLE的会话级别临时表类似,但是在会话退出的时候,ORACLE不会删除表.
  • SQL SERVER的全局临时表(##) 是指多个连接共享同一片内存.当没有指针引用该内存区域时,SQL SERVER自动释放全局临时表.
  • 由于ORACLE不是一种内存中的数据库. 所以如果ORACLE类似SQL SERVER 频繁的对临时表进行建立和删除,必定会影响性能.所以ORACLE会保留临时表的定义直到用户DROP TABLE.
  • 在ORACLE中,如果需要多个用户共享一个表(类似SQL SERVER的全局临时表##).则可以利用永久表,并且在表中添加一些可以唯一标识用户的列.利用触发器和视图.当用户退出的时候,根据该登陆用户的唯一信息删除相应的表中的数据. 这种方法给ORACLE带来了一定量的负载.
赞(1) 打赏
未经允许不得转载:刘鹏博客 » Oracle学习笔记—-demp临时表用法
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏