• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            sqlserver,oracle和DB2的臨時(shí)表概述

            Posted on 2010-05-13 22:57 Prayer 閱讀(198) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DB2

            MS SQLSERVER

            SQL Server 支持臨時(shí)表。臨時(shí)表就是那些名稱以井號(hào) (#) 開頭的表。如果當(dāng)用戶斷開連接時(shí)沒(méi)有除去臨時(shí)表,SQL Server 將自動(dòng)除去臨時(shí)表。臨時(shí)表不存儲(chǔ)在當(dāng)前數(shù)據(jù)庫(kù)內(nèi),而是存儲(chǔ)在系統(tǒng)數(shù)據(jù)庫(kù) tempdb 內(nèi)。

            臨時(shí)表有兩種類型:

            本地臨時(shí)表:本地臨時(shí)表的名稱以單個(gè)數(shù)字符號(hào) (#) 打頭;它們僅對(duì)當(dāng)前的用戶連接是可見的;當(dāng)用戶從 Microsoft SQL Server 2000 實(shí)例斷開連接時(shí)被刪除。

            全局臨時(shí)表:全局臨時(shí)表的名稱以數(shù)學(xué)符號(hào) (##) 打頭,創(chuàng)建后對(duì)任何用戶都是可見的。如果在創(chuàng)建全局臨時(shí)表的連接斷開前沒(méi)有顯式地除去這些表,那么只要所有其它任務(wù)停止引用它們,這些表即被除去。當(dāng)創(chuàng)建全局臨時(shí)表的連接斷開后,新的任務(wù)不能再引用它們。當(dāng)前的語(yǔ)句一執(zhí)行完,任務(wù)與表之間的關(guān)聯(lián)即被除去;因此通常情況下,只要?jiǎng)?chuàng)建全局臨時(shí)表的連接斷開,全局臨時(shí)表即被除去。


            例如,如果創(chuàng)建名為 employees 的表,則任何人只要在數(shù)據(jù)庫(kù)中有使用該表的安全權(quán)限就可以使用該表,除非它已刪除。如果創(chuàng)建名為 #employees 的本地臨時(shí)表,只有您能對(duì)該表執(zhí)行操作且在斷開連接時(shí)該表刪除。如果創(chuàng)建名為 ##employees 的全局臨時(shí)表,數(shù)據(jù)表中的任何用戶均可對(duì)該表執(zhí)行操作。如果該表在您創(chuàng)建后沒(méi)有其他用戶使用,則當(dāng)您斷開連接時(shí)該表刪除。如果該表在您創(chuàng)建后有其他用戶使用,則 SQL Server在所有用戶斷開連接后刪除該表。

            現(xiàn)在,臨時(shí)表的許多傳統(tǒng)用途可由具有 table 數(shù)據(jù)類型的變量替換。

             

             

            ORACLE

            Oracle支持臨時(shí)表。臨時(shí)表用來(lái)保存事務(wù)或會(huì)話期間的中間結(jié)果。在臨時(shí)表中保存的數(shù)據(jù)只有對(duì)當(dāng)前會(huì)話是可見的,任何會(huì)話都不能看到其他會(huì)話的數(shù)據(jù),即使在當(dāng)前會(huì)話COMMIT數(shù)據(jù)以后也是不可見的。多用戶并行不是問(wèn)題,一個(gè)會(huì)話從來(lái)不阻塞另一個(gè)會(huì)話使用臨時(shí)表。即使鎖定臨時(shí)表,一個(gè)會(huì)話也不會(huì)阻塞其他會(huì)話使用臨時(shí)表。臨時(shí)表比正常表產(chǎn)生的REDO少得多,然而,由于臨時(shí)表必須產(chǎn)生包含數(shù)據(jù)的UNDO信息,所以會(huì)產(chǎn)生一定數(shù)量的REDO日志。

            臨時(shí)表將從用戶臨時(shí)表空間中分配空間,或者如果從有定義權(quán)的程序中訪問(wèn),將使用程序所有者的臨時(shí)表空間。全局臨時(shí)表實(shí)際上只是表本身的模板。創(chuàng)建臨時(shí)表的行為不包括存儲(chǔ)空間的分配,也不包括INITIAL的分配。因此,在運(yùn)行時(shí)當(dāng)一個(gè)會(huì)話首先將數(shù)據(jù)放到臨時(shí)表中時(shí),這時(shí)將創(chuàng)建這個(gè)會(huì)話的臨時(shí)段。由于每個(gè)會(huì)話獲取自己的臨時(shí)段,每個(gè)用戶可能在不同的表空間中為臨時(shí)表分配空間。USER1default臨時(shí)表空間為TEMP1,他的臨時(shí)表將從TEMP1中分配空間,USER2default臨時(shí)表空間為TEMP2,他的臨時(shí)表將從TEMP2中分配空間。

            臨時(shí)表在每個(gè)數(shù)據(jù)庫(kù)中只需創(chuàng)建一次,不必在每個(gè)存儲(chǔ)過(guò)程中創(chuàng)建。臨時(shí)表總是存在的,除非手動(dòng)的刪除他。臨時(shí)表作為對(duì)象存在數(shù)據(jù)字典中,并且總是保持為空,直到有會(huì)話在其中放入數(shù)據(jù)。Oracle允許創(chuàng)建基于臨時(shí)表的視圖和存儲(chǔ)過(guò)程。

            臨時(shí)表可以是以會(huì)話為基礎(chǔ)的,也可以是以事務(wù)為基礎(chǔ)的。ON COMMIT PRESERVE ROWS子句使臨時(shí)表成為基于會(huì)話的模式。行將留在此表中,直到會(huì)話斷開或通過(guò)DELETETRUNCATE從物理上刪除這些行。ON COMMIT DELETE ROWS子句使臨時(shí)表成為基于事務(wù)的模式。當(dāng)會(huì)話提交后,行消失。這個(gè)臨時(shí)表的自動(dòng)清除過(guò)程不會(huì)有額外的開銷。

            oracle中,應(yīng)用程序需要的臨時(shí)表應(yīng)該在程序安裝時(shí)創(chuàng)建,而不是在程序運(yùn)行時(shí)創(chuàng)建。(這是與ms sqlserversybase的使用的不同)

            在任何數(shù)據(jù)庫(kù)中,臨時(shí)表的一個(gè)缺點(diǎn)是:事實(shí)上優(yōu)化器在臨時(shí)表中沒(méi)有真正的統(tǒng)計(jì)功能。然而,在oracle中,一系列較好的統(tǒng)計(jì)猜測(cè)可以通過(guò)DBMS_STATS包在臨時(shí)表中設(shè)置。

             

             

            DB2

            可使用 DECLARE GLOBAL TEMPORARY TABLE 語(yǔ)句來(lái)定義臨時(shí)表。DB2的臨時(shí)表是基于會(huì)話的,且在會(huì)話之間是隔離的。當(dāng)會(huì)話結(jié)束時(shí),臨時(shí)表的數(shù)據(jù)被刪除,臨時(shí)表被隱式卸下。對(duì)臨時(shí)表的定義不會(huì)在SYSCAT.TABLES中出現(xiàn)

            下面是定義臨時(shí)表的一個(gè)示例:

               DECLARE GLOBAL TEMPORARY TABLE gbl_temp
                  LIKE empltabl
                  ON COMMIT DELETE ROWS
                  NOT LOGGED
                  IN usr_tbsp

            此語(yǔ)句創(chuàng)建一個(gè)名為 gbl_temp 的用戶臨時(shí)表。定義此用戶臨時(shí)表 所使用的列的名稱和說(shuō)明與 empltabl 的列的名稱和說(shuō)明完全相同。隱式定義 只包括列名、數(shù)據(jù)類型、可為空特性和列缺省值屬性。未定義所有其他列屬性,包括唯一約束、外部關(guān)鍵字約束、觸發(fā)器和索引。執(zhí)行 COMMIT 操作時(shí), 若未對(duì)該表打開 WITH HOLD 游標(biāo),則該表中的所有數(shù)據(jù)都被刪除。不記錄 對(duì)用戶臨時(shí)表所作的更改。用戶臨時(shí)表被放在指定的用戶臨時(shí)表空間中。此表空間必須存在,否則此表的聲明將失敗。

            戶定義臨時(shí)表不支持:

            • LOB 類型的列(或基于 LOB 的單值類型列)
            • 用戶定義類型列
            • LONG VARCHAR
            • DATALINK
            99久久亚洲综合精品网站| 久久亚洲国产精品成人AV秋霞| 亚洲国产一成人久久精品| 日韩人妻无码一区二区三区久久| 久久青青草原精品国产| 国产巨作麻豆欧美亚洲综合久久 | 人妻精品久久无码专区精东影业| 色综合久久综合中文综合网| 91久久精品国产91性色也| 人妻丰满?V无码久久不卡| 国产精品一区二区久久精品| 久久精品国产男包| 国内精品久久久久久久亚洲| 东京热TOKYO综合久久精品| 伊人久久大香线蕉精品不卡 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲日本久久久午夜精品| 久久99久久99小草精品免视看| 精品久久久久成人码免费动漫| 91精品婷婷国产综合久久| 久久99精品久久久久久久不卡| 国内精品伊人久久久影院| 久久久久久久国产免费看| 狠色狠色狠狠色综合久久| 久久婷婷成人综合色综合| 国产精品久久久久a影院| 久久人搡人人玩人妻精品首页| 久久99精品综合国产首页| 国内精品伊人久久久久av一坑| 国产精品美女久久福利网站| 久久中文字幕无码专区| 一日本道伊人久久综合影| 久久www免费人成看国产片| 91亚洲国产成人久久精品网址| 久久香蕉综合色一综合色88| 97r久久精品国产99国产精| 国产精品久久久久久影院| 办公室久久精品| 久久亚洲精品无码aⅴ大香| 色诱久久久久综合网ywww| 狠狠久久亚洲欧美专区|