<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-30  評論-123  文章-0  trackbacks-0
    主流數據庫中臨時表的使用
    ?
    MS SQLSERVER
    SQL Server 支持臨時表。臨時表就是那些名稱以井號 (#) 開頭的表。如果當用戶斷開連接時沒有除去臨時表,SQL Server 將自動除去臨時表。臨時表不存儲在當前數據庫內,而是存儲在系統數據庫 tempdb 內。
    臨時表有兩種類型:
    本地臨時表:本地臨時表的名稱以單個數字符號 (#) 打頭;它們僅對當前的用戶連接是可見的;當用戶從 Microsoft SQL Server 2000 實例斷開連接時被刪除。
    全局臨時表:全局臨時表的名稱以數學符號 (##) 打頭,創建后對任何用戶都是可見的。如果在創建全局臨時表的連接斷開前沒有顯式地除去這些表,那么只要所有其它任務停止引用它們,這些表即被除去。當創建全局臨時表的連接斷開后,新的任務不能再引用它們。當前的語句一執行完,任務與表之間的關聯即被除去;因此通常情況下,只要創建全局臨時表的連接斷開,全局臨時表即被除去。
    例如,如果創建名為 employees 的表,則任何人只要在數據庫中有使用該表的安全權限就可以使用該表,除非它已刪除。如果創建名為 #employees 的本地臨時表,只有您能對該表執行操作且在斷開連接時該表刪除。如果創建名為 ##employees 的全局臨時表,數據表中的任何用戶均可對該表執行操作。如果該表在您創建后沒有其他用戶使用,則當您斷開連接時該表刪除。如果該表在您創建后有其他用戶使用,則 SQL Server在所有用戶斷開連接后刪除該表。
    現在,臨時表的許多傳統用途可由具有 table 數據類型的變量替換。
    ?
    ORACLE
    Oracle支持臨時表。臨時表用來保存事務或會話期間的中間結果。在臨時表中保存的數據只有對當前會話是可見的,任何會話都不能看到其他會話的數據,即使在當前會話COMMIT數據以后也是不可見的。多用戶并行不是問題,一個會話從來不阻塞另一個會話使用臨時表。即使鎖定臨時表,一個會話也不會阻塞其他會話使用臨時表。臨時表比正常表產生的REDO少得多,然而,由于臨時表必須產生包含數據的UNDO信息,所以會產生一定數量的REDO日志。
    臨時表將從用戶臨時表空間的的目前日志中分配空間,或者如果從有定義權的程序中訪問,將使用程序所有者的臨時表空間。全局臨時表實際上只是表本身的模板。創建臨時表的行為不包括存儲空間的分配,也不包括INITIAL的分配。因此,在運行時當一個會話首先將數據放到臨時表中時,這時將創建這個會話的臨時段。由于每個會話獲取自己的臨時段,每個用戶可能在不同的表空間中為臨時表分配空間。USER1的default臨時表空間為TEMP1,他的臨時表將從TEMP1中分配空間,USER2的default臨時表空間為TEMP2,他的臨時表將從TEMP2中分配空間。
    臨時表在每個數據庫中只需創建一次,不必在每個存儲過程中創建。臨時表總是存在的,除非手動的刪除他。臨時表作為對象存在數據字典中,并且總是保持為空,直到有會話在其中放入數據。Oracle允許創建基于臨時表的視圖和存儲過程。
    臨時表可以是以會話為基礎的,也可以是以事務為基礎的。ON COMMIT PRESERVE ROWS子句使臨時表成為基于會話的模式。行將留在此表中,直到會話斷開或通過DELETE或TRUNCATE從物理上刪除這些行。ON COMMIT DELETE ROWS子句使臨時表成為基于事務的模式。當會話提交后,行消失。這個臨時表的自動清除過程不會有額外的開銷。
    在oracle中,應用程序需要的臨時表應該在程序安裝時創建,而不是在程序運行時創建。(這是與ms sqlserver或sybase的使用的不同)
    在任何數據庫中,臨時表的一個缺點是:事實上優化器在臨時表中沒有真正的統計功能。然而,在oracle中,一系列較好的統計猜測可以通過DBMS_STATS包在臨時表中設置。
    ?
    DB2
    可使用 DECLARE GLOBAL TEMPORARY TABLE 語句來定義臨時表。DB2的臨時表是基于會話的,且在會話之間是隔離的。當會話結束時,臨時表的數據被刪除,臨時表被隱式卸下。對臨時表的定義不會在SYSCAT.TABLES中出現
    下面是定義臨時表的一個示例:
    ?? DECLARE GLOBAL TEMPORARY TABLE gbl_temp

    ????? LIKE empltabl

    ????? ON COMMIT DELETE ROWS

    ????? NOT LOGGED

    ????? IN usr_tbsp

    此語句創建一個名為 gbl_temp 的用戶臨時表。定義此用戶臨時表 所使用的列的名稱和說明與 empltabl 的列的名稱和說明完全相同。隱式定義 只包括列名、數據類型、可為空特性和列缺省值屬性。未定義所有其他列屬性,包括唯一約束、外部關鍵字約束、觸發器和索引。執行 COMMIT 操作時, 若未對該表打開 WITH HOLD 游標,則該表中的所有數據都被刪除。不記錄 對用戶臨時表所作的更改。用戶臨時表被放在指定的用戶臨時表空間中。此表空間必須存在,否則此表的聲明將失敗。
    戶定義臨時表不支持:
    • LOB 類型的列(或基于 LOB 的單值類型列)
    • 用戶定義類型列
    • LONG VARCHAR 列
    DATALINK 列
    posted on 2006-04-25 13:46 學二的貓 閱讀(1738) 評論(0)  編輯  收藏 所屬分類: 數據庫技術
    主站蜘蛛池模板: 亚洲av无码成人影院一区 | 亚洲AV色无码乱码在线观看| 一区二区三区无码视频免费福利| jlzzjlzz亚洲乱熟在线播放| 国产亚洲人成在线播放| 又爽又高潮的BB视频免费看| 爱爱帝国亚洲一区二区三区| 免费一级毛片在线观看| 四虎国产精品成人免费久久| 综合亚洲伊人午夜网| 黄色网页在线免费观看| 亚洲午夜久久久久久久久电影网| aa毛片免费全部播放完整| 久久久亚洲精品视频| **aaaaa毛片免费同男同女| 亚洲不卡视频在线观看| 思思99re66在线精品免费观看| 亚洲av无码成人精品区一本二本| 国产一区二区三区在线免费观看 | 亚洲av无码成人精品区在线播放 | 69成人免费视频| 国产亚洲精品AAAA片APP| 亚洲毛片不卡av在线播放一区| 中国一级毛片视频免费看| 婷婷久久久亚洲欧洲日产国码AV | 四虎永久成人免费影院域名| 一二三四在线观看免费中文在线观看| 亚洲最大av无码网址| 99免费观看视频| 亚洲色大18成人网站WWW在线播放| 亚洲AV伊人久久青青草原| 国产午夜无码精品免费看动漫| 亚洲人成人77777在线播放| 最新69国产成人精品免费视频动漫| 日本高清免费中文在线看| 久久久亚洲精品视频| 午夜视频免费成人| 怡红院免费全部视频在线视频| 亚洲一区精品视频在线| 亚洲男人第一无码aⅴ网站| 1000部拍拍拍18勿入免费视频下载 |