一、臨時表
今天看了下臨時表,感覺比較容易,沒有想象的那么復雜。
-- 會話級別的 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
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
