【Oracle 学习笔记】Day 4 临时表、游标


一、临时表

今天看了下临时表,感觉比较容易,没有想象的那么复杂。

--会话级别的
Create Global Temporary Table Table_Name  
(
       Col1 Type1,Col2 Type2...
) On Commit Preserve Rows ;
--其实翻译的也挺人性化的,会话级别的临时表,在提交事务的时候保留行

--事务级别的
Create Global Temporary Table Table_Name  
(
       Col1 Type1,Col2 Type2...
) On Commit Delete Rows ;
--而事务级别的临时表在提交事务的时候删掉行.

我在PL/SQL里面测试的。如果说往第一个临时表里面Insert语句,然后在本窗口中提交事务后,在用SELECT语句查询这个表,仍旧能查到数据。但是如果是第二个表,当点击事务提交之后,SELECT语句就查不到数据量。当然,这两种临时表,都是针对当前连接的,有人说是SESSION的。就是如果新建一个链接,那么无论之前那个窗口的事务是否提交,都SELECT查询不到。

在实际应用中,我看了看有的ERP系统里面,用到基本上是会话级别的。但是还是具体问题具体分析。至于两者的效率,还有待分析。

这里简单提一提ORACLE和SQL Server关于临时表的区别。

1.对于SQL Server来说,可以在表名称前面加上#符号来表示一个类似于Oracle会话级的临时表的功能。

但是,对于SQL Server来说,临时表及临时表的数据在会话结束时(链接释放、Session结束)会同时释放掉;而对于Oracle来说,仅仅是将该链接对应的数据释放掉,而临时表仍旧存放在数据字典中。纠结其原因,SQL Server是内存型数据库,对于频繁的更新删除操作,SQL Server更有些优势,Oracle为了性能的考虑,选择了建立于实际表差不多的这样方式。

2.对于SQL Server 来说,可以在表名称前面加上##符号来表示一个全局的临时表,额,同Oracle的全局不是一个概念。其基本概念就是说,在建立一个带有##的临时表后,在建立该表的用户释放连接之前,除非显示的声明Drop table 之外,其他用户都可以对该表的数据操作,包括Drop table,这点对于Oracle来说,可能就得采用实际表来操作了。

3.对于数据限制方面,Primary key 都支持,foreign key 好像不支持(没咋用过,一般是用主键链接的)

二,游标

引用一个别人的内容,感觉比较全呢。

http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html

优质内容筛选与推荐>>
1、wordpress 代码获得菜单的方法
2、配置FileZilla Ftp服务器
3、复利计算器3.01
4、background背景定位的几种不同
5、比特币的区块结构解析


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号