本站不再更新,歡迎光臨 java開(kāi)發(fā)技術(shù)網(wǎng)
          隨筆-230  評(píng)論-230  文章-8  trackbacks-0
          在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 說(shuō)明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)
          --ON COMMIT PRESERVE ROWS 說(shuō)明臨時(shí)表是會(huì)話指定,當(dāng)中斷會(huì)話時(shí)ORACLE將截?cái)啾怼?
          沖突的問(wèn)題更本不用考慮.
            
          臨時(shí)表只是保存當(dāng)前會(huì)話(session)用到的數(shù)據(jù),數(shù)據(jù)只在事務(wù)或會(huì)話期間存在。
            
          通過(guò)CREATE GLOBAL TEMPORARY TABLE命令創(chuàng)建一個(gè)臨時(shí)表,對(duì)于事務(wù)類型的臨時(shí)表,
          數(shù)據(jù)只是在事務(wù)期間存在,對(duì)于會(huì)話類型的臨時(shí)表,數(shù)據(jù)在會(huì)話期間存在。
            
          會(huì)話的數(shù)據(jù)對(duì)于當(dāng)前會(huì)話私有。每個(gè)會(huì)話只能看到并修改自己的數(shù)據(jù)。DML鎖不會(huì)加到
          臨時(shí)表的數(shù)據(jù)上。下面的語(yǔ)句控制行的存在性。
            
          ● ON COMMIT DELETE ROWS 表名行只是在事務(wù)期間可見(jiàn)
          ● ON COMMIT PRESERVE ROWS 表名行在整個(gè)會(huì)話期間可見(jiàn)
            
          可以對(duì)臨時(shí)表創(chuàng)建索引,視圖,出發(fā)器,可以用export和import工具導(dǎo)入導(dǎo)出表的
          定義,但是不能導(dǎo)出數(shù)據(jù)。表的定義對(duì)所有的會(huì)話可見(jiàn)。


          Temporary Tables臨時(shí)表
          1簡(jiǎn)介
             ORACLE數(shù)據(jù)庫(kù)除了可以保存永久表外,還可以建立臨時(shí)表temporary tables。這些臨時(shí)表用來(lái)保存一個(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ì)話級(jí)臨時(shí)表 和 事務(wù)級(jí)臨時(shí)表。
          會(huì)話級(jí)臨時(shí)表是指臨時(shí)表中的數(shù)據(jù)只在會(huì)話生命周期之中存在,當(dāng)用戶退出會(huì)話結(jié)束的時(shí)候,Oracle自動(dòng)清除臨時(shí)表中數(shù)據(jù)。
          事務(wù)級(jí)臨時(shí)表是指臨時(shí)表中的數(shù)據(jù)只在事務(wù)生命周期中存在。當(dāng)一個(gè)事務(wù)結(jié)束(commit or rollback),Oracle自動(dòng)清除臨時(shí)表中數(shù)據(jù)。
          臨時(shí)表中的數(shù)據(jù)只對(duì)當(dāng)前Session有效,每個(gè)Session都有自己的臨時(shí)數(shù)據(jù),并且不能訪問(wèn)其它Session的臨時(shí)表中的數(shù)據(jù)。因此,
          臨時(shí)表不需要DML鎖.當(dāng)一個(gè)會(huì)話結(jié)束(用戶正常退出 用戶不正常退出 ORACLE實(shí)例崩潰)或者一個(gè)事務(wù)結(jié)束的時(shí)候,Oracle對(duì)這個(gè)會(huì)話的
          表執(zhí)行 TRUNCATE 語(yǔ)句清空臨時(shí)表數(shù)據(jù).但不會(huì)清空其它會(huì)話臨時(shí)表中的數(shù)據(jù).
          你可以索引臨時(shí)表和在臨時(shí)表基礎(chǔ)上建立視圖.同樣,建立在臨時(shí)表上的索引也是臨時(shí)的,也是只對(duì)當(dāng)前會(huì)話或者事務(wù)有效.  
          臨時(shí)表可以擁有觸發(fā)器.
          3建立臨時(shí)表
             臨時(shí)表的定義對(duì)所有會(huì)話SESSION都是可見(jiàn)的,但是表中的數(shù)據(jù)只對(duì)當(dāng)前的會(huì)話或者事務(wù)有效.
             建立方法:
          1) ON COMMIT DELETE ROWS 定義了建立事務(wù)級(jí)臨時(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ì)話級(jí)臨時(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看不見(jiàn)會(huì)話1中臨時(shí)表的數(shù)據(jù).
          posted on 2007-06-20 17:34 有貓相伴的日子 閱讀(3941) 評(píng)論(1)  編輯  收藏 所屬分類: pl/sql

          評(píng)論:
          # re: oracle臨時(shí)表 2014-05-02 14:48 | 2
          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(32)

          隨筆分類(222)

          隨筆檔案(224)

          文章分類(4)

          文章檔案(7)

          相冊(cè)

          收藏夾(4)

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          本站不再更新,歡迎光臨 java開(kāi)發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 巨野县| 定南县| 连州市| 遵义县| 新乡市| 根河市| 阜城县| 静安区| 洱源县| 彰化市| 车致| 土默特右旗| 永济市| 运城市| 松桃| 留坝县| 大理市| 江北区| 甘洛县| 南城县| 宁海县| 博乐市| 中超| 临桂县| 杭锦旗| 新化县| 蒙阴县| 镇巴县| 镇江市| 定安县| 北川| 睢宁县| 长垣县| 江津市| 吐鲁番市| 苏尼特左旗| 余江县| 资阳市| 涪陵区| 天门市| 镇平县|