oracle中建立指针,Oracle 建立临时表语法及使用技巧

2> 若在存储过程中建的临时表为on commit delete rows。且存储过程中无commit/rollback命令,则在当前会话执行存储过程后,在该存储过程中发生的数据仍然可以select到,因为没有发出commit/rollback命令。因此无论是以何种形式建立的临时表,或者PLSQL中没有建立任何临时表,但只要在PLSQL中有DML(insert/update/delete)的操作,则在PLSQL结束处应加上COMMIT;

否则对有临时表的情况造成表数据无法及时清除,对没有临时表的情况造成对DML操作的表的死锁

D.数据处理比较复杂的时候临时表快,反之视图快点

E.在仅仅查询数据的时候建议用游标: open cursor for 'sql clause'; 有时可使用临时表避免其他时候使用游标

4. 与SQL Server临时表的对比

A.SQL Server临时表的临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除

B.SQL Server临时表的临时表有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同

本地临时表的名称以单个数字符号#打头,仅对当前的用户连接是可见的,当用户从SQL Server 2000实例断开连接时被删除。全局临时表的名称以数学符号##打头,创建后对任何用户都是可见的,当所有引用该表的用户从SQL Server断开连接时被删除

EG:

1> 如果创建名为employees的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。

2> 如果创建名为#employees的本地临时表,只有创建者能对该表执行操作且在断开连接时该表自动删除。

3> 如果创建名为##employees的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在创建者创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在创建者创建后有其他用户使用,则SQL Server在所有用户断开连接后菜自动删除该表

C.小结

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带来了一定量的负载

7> SQL Server的全局临时表##的数据对于所有用户是可见的,没有针对指定用户可见的特性0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值