小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Oracle中如何使用臨時(shí)表??

 惡之一眉 2011-08-26
首先是創(chuàng)建臨時(shí)表的語法:

CREATE   GLOBAL   TEMPORARY   TABLE   table

(   column   datatype   [DEFAULT   expr]   [{   NULL   |   NOT   NULL}]  

[,   column   datatype   [DEFAULT   expr]   [   {NULL   |   NOT   NULL}   ]
...  
)

ON   COMMIT   {DELETE   |   PRESERVE   }   ROWS   ;

Oracle中的臨時(shí)表有兩種
一種是事務(wù)級別的臨時(shí)表它在事務(wù)結(jié)束的時(shí)候自動(dòng)清空記錄:ON   COMMIT   DELETE   ROWS
另一種是會(huì)話級的它在我們訪問數(shù)據(jù)庫是的一個(gè)會(huì)話結(jié)束后自動(dòng)的清空:ON   COMMIT   PRESERVE   ROWS


在Oracle8i或以上版本中,可以創(chuàng)建以下兩種臨時(shí)表:  
1。會(huì)話特有的臨時(shí)表  
        CREATE   GLOBAL   TEMPORARY   <TABLE_NAME>   ( <column   specification> )  
        ON   COMMIT   PRESERVE   ROWS;  
   
2。事務(wù)特有的臨時(shí)表  
        CREATE   GLOBAL   TEMPORARY   <TABLE_NAME>   ( <column   specification> )  
        ON   COMMIT   DELETE   ROWS;  
      CREATE   GLOBAL   TEMPORARY   TABLE   MyTempTable  
所建的臨時(shí)表雖然是存在的,但是你試一下insert   一條記錄然后用別的連接登上去select,記錄是空的,明白了吧,我把下面兩句話再貼一下:  
--ON   COMMIT   DELETE   ROWS   說明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)  
--ON   COMMIT   PRESERVE   ROWS   說明臨時(shí)表是會(huì)話指定,當(dāng)中斷會(huì)話時(shí)ORACLE將截?cái)啾怼? 
沖突的問題更本不用考慮.  
   
臨時(shí)表只是保存當(dāng)前會(huì)話(session)用到的數(shù)據(jù),數(shù)據(jù)只在事務(wù)或會(huì)話期間存在。  
   
通過CREATE   GLOBAL   TEMPORARY   TABLE命令創(chuàng)建一個(gè)臨時(shí)表,對于事務(wù)類型的臨時(shí)表,  
數(shù)據(jù)只是在事務(wù)期間存在,對于會(huì)話類型的臨時(shí)表,數(shù)據(jù)在會(huì)話期間存在。  
   
會(huì)話的數(shù)據(jù)對于當(dāng)前會(huì)話私有。每個(gè)會(huì)話只能看到并修改自己的數(shù)據(jù)。DML鎖不會(huì)加到  
臨時(shí)表的數(shù)據(jù)上。下面的語句控制行的存在性。  
     
●   ON   COMMIT   DELETE   ROWS   表名行只是在事務(wù)期間可見  
●   ON   COMMIT   PRESERVE   ROWS   表名行在整個(gè)會(huì)話期間可見  
   
可以對臨時(shí)表創(chuàng)建索引,視圖,出發(fā)器,可以用export和import工具導(dǎo)入導(dǎo)出表的  
定義,但是不能導(dǎo)出數(shù)據(jù)。表的定義對所有的會(huì)話可見。


Temporary   Tables臨時(shí)表
1簡介
      ORACLE數(shù)據(jù)庫除了可以保存永久表外,還可以建立臨時(shí)表temporary   tables。這些臨時(shí)表用來保存一個(gè)會(huì)話SESSION的數(shù)據(jù),
      或者保存在一個(gè)事務(wù)中需要的數(shù)據(jù)。當(dāng)會(huì)話退出或者用戶提交commit和回滾rollback事務(wù)的時(shí)候,臨時(shí)表的數(shù)據(jù)自動(dòng)清空,
      但是臨時(shí)表的結(jié)構(gòu)以及元數(shù)據(jù)還存儲(chǔ)在用戶的數(shù)據(jù)字典中。
      臨時(shí)表只在oracle8i以及以上產(chǎn)品中支持。
2詳細(xì)介紹
      Oracle臨時(shí)表分為   會(huì)話級臨時(shí)表   和   事務(wù)級臨時(shí)表。
會(huì)話級臨時(shí)表是指臨時(shí)表中的數(shù)據(jù)只在會(huì)話生命周期之中存在,當(dāng)用戶退出會(huì)話結(jié)束的時(shí)候,Oracle自動(dòng)清除臨時(shí)表中數(shù)據(jù)。
事務(wù)級臨時(shí)表是指臨時(shí)表中的數(shù)據(jù)只在事務(wù)生命周期中存在。當(dāng)一個(gè)事務(wù)結(jié)束(commit   or   rollback),Oracle自動(dòng)清除臨時(shí)表中數(shù)據(jù)。
臨時(shí)表中的數(shù)據(jù)只對當(dāng)前Session有效,每個(gè)Session都有自己的臨時(shí)數(shù)據(jù),并且不能訪問其它Session的臨時(shí)表中的數(shù)據(jù)。因此,
臨時(shí)表不需要DML鎖.當(dāng)一個(gè)會(huì)話結(jié)束(用戶正常退出   用戶不正常退出   ORACLE實(shí)例崩潰)或者一個(gè)事務(wù)結(jié)束的時(shí)候,Oracle對這個(gè)會(huì)話的
表執(zhí)行   TRUNCATE   語句清空臨時(shí)表數(shù)據(jù).但不會(huì)清空其它會(huì)話臨時(shí)表中的數(shù)據(jù).
你可以索引臨時(shí)表和在臨時(shí)表基礎(chǔ)上建立視圖.同樣,建立在臨時(shí)表上的索引也是臨時(shí)的,也是只對當(dāng)前會(huì)話或者事務(wù)有效.    
臨時(shí)表可以擁有觸發(fā)器.
3建立臨時(shí)表
      臨時(shí)表的定義對所有會(huì)話SESSION都是可見的,但是表中的數(shù)據(jù)只對當(dāng)前的會(huì)話或者事務(wù)有效.  
      建立方法:
1)   ON   COMMIT   DELETE   ROWS   定義了建立事務(wù)級臨時(shí)表的方法.
CREATE   GLOBAL   TEMPORARY   TABLE   admin_work_area
                (startdate   DATE,
                  enddate   DATE,
                  class   CHAR(20))
            ON   COMMIT   DELETE   ROWS;
EXAMPLE:
SQL>   CREATE   GLOBAL   TEMPORARY   TABLE   admin_work_area
    2                     (startdate   DATE,
    3                       enddate   DATE,
    4                       class   CHAR(20))
    5                 ON   COMMIT   DELETE   ROWS;
SQL>   create   table   permernate(   a   number);
SQL>   insert   into   admin_work_area   values(sysdate,sysdate, 'temperary   table ');
SQL>   insert   into   permernate   values(1);
SQL>   commit;
SQL>   select   *   from   admin_work_area;
SQL>   select     *   from   permernate;
A
1
2)ON   COMMIT   PRESERVE   ROWS   定義了創(chuàng)建會(huì)話級臨時(shí)表的方法.
CREATE   GLOBAL   TEMPORARY   TABLE   admin_work_area
                (startdate   DATE,
                  enddate   DATE,
                  class   CHAR(20))
          ON   COMMIT   PRESERVE   ROWS;
EXAMPLE:

會(huì)話1:
SQL>   drop   table   admin_work_area;
SQL>   CREATE   GLOBAL   TEMPORARY   TABLE   admin_work_area
    2                     (startdate   DATE,
    3                       enddate   DATE,
    4                       class   CHAR(20))
    5               ON   COMMIT   PRESERVE   ROWS;
SQL>   insert   into   permernate   values(2);
SQL>   insert   into   admin_work_area   values(sysdate,sysdate, 'session   temperary ');
SQL>   commit;
SQL>   select   *   from   permernate;

                  A
----------
                  1
                  2

SQL>   select   *   from   admin_work_area;

STARTDATE     ENDDATE         CLASS
----------   ----------   --------------------
17-1??   -03   17-1??   -03   session   temperary

會(huì)話2:

SQL>   select   *   from   permernate;

                  A
----------
                  1
                  2

SQL>   select   *   from   admin_work_area;

未選擇行.

會(huì)話2看不見會(huì)話1中臨時(shí)表的數(shù)據(jù).


4   ORACLE臨時(shí)表和SQLSERVER臨時(shí)表異同

SQL   SERVER臨時(shí)表
也可以創(chuàng)建臨時(shí)表。臨時(shí)表與永久表相似,但臨時(shí)表存儲(chǔ)在   tempdb   中,當(dāng)不再使用時(shí)會(huì)自動(dòng)刪除。
有本地和全局兩種類型的臨時(shí)表,二者在名稱、可見性和可用性上均不相同。本地臨時(shí)表的名稱以單個(gè)數(shù)字符號   (#)   打頭;
它們僅對當(dāng)前的用戶連接是可見的;當(dāng)用戶從   Microsoft?   SQL   Server?   2000   實(shí)例斷開連接時(shí)被刪除。全局臨時(shí)表的名稱以數(shù)學(xué)符號  
(##)   打頭,創(chuàng)建后對任何用戶都是可見的,當(dāng)所有引用該表的用戶從   SQL   Server   斷開連接時(shí)被刪除。
例如,如果創(chuàng)建名為   employees   的表,則任何人只要在數(shù)據(jù)庫中有使用該表的安全權(quán)限就可以使用該表,除非它已刪除。
如果創(chuàng)建名為   #employees   的本地臨時(shí)表,只有您能對該表執(zhí)行操作且在斷開連接時(shí)該表刪除。如果創(chuàng)建名為   ##employees   的全局臨時(shí)表
,數(shù)據(jù)表中的任何用戶均可對該表執(zhí)行操作。如果該表在您創(chuàng)建后沒有其他用戶使用,則當(dāng)您斷開連接時(shí)該表刪除。如果該表在您創(chuàng)建
后有其他用戶使用,則   SQL   Server在所有用戶斷開連接后刪除該表
不同:
1.                 SQL   SERVER臨時(shí)表是一種”內(nèi)存表”,表是存儲(chǔ)在內(nèi)存中的.ORACLE臨時(shí)表除非執(zhí)行DROP   TABLE,否則表定義會(huì)保留在數(shù)據(jù)字典中.
2.                 SQL   SERVER臨時(shí)表不存在類似ORACLE臨時(shí)表   事務(wù)級別   上的功能.
3                 SQL   SERVER本地臨時(shí)表(#)   與   ORACLE的會(huì)話級別臨時(shí)表類似,但是在會(huì)話退出的時(shí)候,ORACLE不會(huì)刪除表.
4                 SQL   SERVER的全局臨時(shí)表(##)   是指多個(gè)連接共享同一片內(nèi)存.當(dāng)沒有指針引用該內(nèi)存區(qū)域時(shí),SQL   SERVER自動(dòng)釋放全局臨時(shí)表.
5                 由于ORACLE不是一種   內(nèi)存中的數(shù)據(jù)庫.   所以如果ORACLE類似SQL   SERVER   頻繁的對臨時(shí)表進(jìn)行建立和刪除,必定會(huì)影響性能.
所以O(shè)RACLE會(huì)保留臨時(shí)表的定義直到用戶DROP   TABLE.
6                 在ORACLE中,如果需要多個(gè)用戶共享一個(gè)表(類似SQL   SERVER的全局臨時(shí)表##).則可以利用永久表,
并且在表中添加一些可以唯一標(biāo)識用戶的列.利用觸發(fā)器和視圖.當(dāng)用戶退出的時(shí)候,根據(jù)該登陸用戶的唯一信息刪除相應(yīng)的表中的數(shù)據(jù).
這種方法給ORACLE帶來了一定量的負(fù)

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多