1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Oracle的臨時表

      臨時表概念

      創(chuàng)新互聯(lián)長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為南關(guān)企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)南關(guān)網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

      臨時表用于保存事務(wù)或會話期間的中間結(jié)果集。臨時表中保存的數(shù)據(jù)只對當(dāng)前會話可見,所有會話都看不到其他會話的數(shù)據(jù);即使當(dāng)前會話已經(jīng)提交(commit)了數(shù)據(jù),別的會話也看不到它的數(shù)據(jù)。對于臨時表,不存在多用戶并發(fā)問題,因?yàn)橐粋€會話不會因?yàn)槭褂靡粋€臨時表而阻塞另一個會話,即使我們“鎖住”臨時表,也不妨礙其他會話使用它們自己的臨時表。

      臨時表默認(rèn)存儲在用戶的默認(rèn)臨時空間中,用戶也可以使用TABLESPACE命令指定臨時表所在的臨時表空間。

      臨時表可以創(chuàng)建臨時的索引、視圖、觸發(fā)器。臨時表的數(shù)據(jù)不會備份,恢復(fù),對其的修改也不會有任何日志信息。盡管對臨時表的DML操作速度比較快,但同樣也是要產(chǎn)生Redo Log ,只是同樣的DML語句,比對PERMANENT表的DML 產(chǎn)生的Redo Log少。

      基本語法

      CREATE GLOBAL TEMPORARY TABLE [ schema. ] table
      [ (relational_properties) ]
      [ ON COMMIT { DELETE | PRESERVE } ROWS ]
      [ physical_properties ]
      [ table_properties ]

      詳細(xì)的語法說明參見官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_7002.htm#i2149006

      臨時表分類

      ORACLE臨時表有兩種類型:會話級的臨時表和事務(wù)級的臨時表。

      1.ON COMMIT DELETE ROWS

      它是臨時表的默認(rèn)參數(shù),表示臨時表中的數(shù)據(jù)僅在事物過程(Transaction)中有效,當(dāng)事物提交(COMMIT)后,臨時表的暫時段將被自動截斷(TRUNCATE)。

      2.ON COMMIT PRESERVE ROWS

      它表示臨時表的內(nèi)容可以在當(dāng)前會話跨事物而存在,不過,當(dāng)該會話結(jié)束時,臨時表的臨時段將隨著會話的結(jié)束而被丟棄,臨時表中的數(shù)據(jù)自然也就隨之丟棄。

      臨時表使用演示

      1.基于事務(wù)的臨時表

      --創(chuàng)建臨時表
      zx@ORCL>create global temporary table temp_transaction
        2  (id number,
        3  name varchar2(10) )
        4  on commit delete rows;
      
      Table created.
      --session1插入測試數(shù)據(jù)
      zx@ORCL>insert into temp_transaction values (1,'zx');
      
      1 row created.
      
      zx@ORCL>select * from temp_transaction;
      
              ID NAME
      ---------- ------------------------------
               1 zx
      --同時session2查詢臨時表并插入測試數(shù)據(jù)
      SQL> select * from temp_transaction;
      
      未選定行
      
      SQL> insert into temp_transaction values (2,'lx');
      
      已創(chuàng)建 1 行。
      
      SQL> select * from temp_transaction;
      
      	ID NAME
      ---------- --------------------
      	 2 lx
      --session1 commit操作
      zx@ORCL>commit;
      
      Commit complete.
      
      zx@ORCL>select * from temp_transaction;
      
      no rows selected
      --session2 查詢數(shù)據(jù),commit操作
      SQL> select * from temp_transaction;
      
      	ID NAME
      ---------- --------------------
      	 2 lx
      
      SQL> commit;
      
      提交完成。
      
      SQL> select * from temp_transaction;
      
      未選定行

      由上述操作過程可以看到不同的會話對于臨時表的操作是完全隔離的,commit后,基于事務(wù)的臨時表數(shù)據(jù)就會“消失”。

      2.基于會話的臨時表

      zx@ORCL>create global temporary table temp_session
        2  (id number,
        3  name varchar2(10) )
        4  on commit preserve rows;
      
      Table created.
      
      zx@ORCL>insert into temp_session values (1,'zx');
      
      1 row created.
      
      zx@ORCL>select * from temp_session;
      
              ID NAME
      ---------- ------------------------------
               1 zx
      
      zx@ORCL>commit;
      
      Commit complete.
      
      zx@ORCL>select * from temp_session;
      
              ID NAME
      ---------- ------------------------------
               1 zx
      
      zx@ORCL>truncate table temp_session;
      
      Table truncated.
      
      zx@ORCL>select * from temp_session;
      
      no rows selected
      --truncate表后數(shù)據(jù)“消失”
      zx@ORCL>insert into temp_session values (1,'zx');
      
      1 row created.
      
      zx@ORCL>commit;
      
      Commit complete.
      
      zx@ORCL>select * from temp_session;
      
              ID NAME
      ---------- ------------------------------
               1 zx
      --commit后數(shù)據(jù)還在
      --退出會話重新進(jìn)入
      zx@ORCL>exit
      Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
      With the Partitioning, OLAP, Data Mining and Real Application Testing options
      [oracle@rhel6 ~]$ zx
      
      SQL*Plus: Release 11.2.0.4.0 Production on Sun Jan 1 22:46:13 2017
      
      Copyright (c) 1982, 2013, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
      With the Partitioning, OLAP, Data Mining and Real Application Testing options
      
      zx@ORCL>select * from temp_session;
      
      no rows selected

      通過上述操作可知,基于會話的臨時表,commit后數(shù)據(jù)也不會“消失”,只有當(dāng)truncate或退出會話后數(shù)據(jù)才會“消失”。

      查看臨時表的存在

      zx@ORCL>col table_name for a30
      zx@ORCL>col tablespace_name for a30
      zx@ORCL>col DURATION for a30
      zx@ORCL>select table_name,TABLESPACE_NAME,LOGGING,TEMPORARY,DURATION,MONITORING from user_tables;
      
      TABLE_NAME                     TABLESPACE_NAME                LOGGING   TEM DURATION                       MONITORIN
      ------------------------------ ------------------------------ --------- --- ------------------------------ ---------
      T                              TT                             YES       N                                  YES
      SESS_STATS                     TT                             YES       N                                  YES
      TEMP_SESSION                                                  NO        Y   SYS$SESSION                    NO
      TEMP_TRANSACTION                                              NO        Y   SYS$TRANSACTION                NO

      臨時表用途

      什么時候使用臨時表?用臨時表和用中間表有啥區(qū)別呢?

      我覺得是在需要的時候應(yīng)用,下面是David Dai關(guān)于臨時表的一個應(yīng)用說明,我覺得非常形象的說明了臨時表的應(yīng)用場景:對于一個電子商務(wù)類網(wǎng)站,不同消費(fèi)者在網(wǎng)站上購物,就是一個獨(dú)立的 SESSION,選購商品放進(jìn)購物車中,最后將購物車中的商品進(jìn)行結(jié)算。也就是說,必須在整個SESSION期間保存購物車中的信息。同時,還存在有些消費(fèi)者,往往最終結(jié)賬時放棄購買商品。如果,直接將消費(fèi)者選購信息存放在最終表(PERMANENT)中,必然對最終表造成非常大的壓力。因此,對于這種案例,就可以采用創(chuàng)建臨時表(ON COMMIT PRESERVE ROWS)的方法來解決。數(shù)據(jù)只在 SESSION 期間有效,對于結(jié)算成功的有效數(shù)據(jù),轉(zhuǎn)移到最終表中后,ORACLE自動TRUNCATE 臨時數(shù)據(jù);對于放棄結(jié)算的數(shù)據(jù),ORACLE 同樣自動進(jìn)行 TRUNCATE ,而無須編碼控制,并且最終表只處理有效訂單,減輕了頻繁的DML操作的壓力。

      1:當(dāng)處理某一批臨時數(shù)據(jù),需要多次DML操作時(插入、更新等),建議使用臨時表。

      2:當(dāng)某些表在查詢里面,需要多次用來做連接時。(為了獲取目標(biāo)數(shù)據(jù)需要關(guān)聯(lián)A、B、C, 同時為了獲取另外一個目標(biāo)數(shù)據(jù),需要關(guān)聯(lián)D、B、C....)

      關(guān)于臨時表和中間表(NOLOGGING,保存中間數(shù)據(jù),使用完后刪除)那個更適合用來存儲中間數(shù)據(jù),我個人更傾向于使用臨時表,而不建議使用中間表。

      臨時表的限制

      臨時表不能是分區(qū)表、聚簇表或索引組織表;

      臨時表不可以有外鍵;

      臨時表不能包含嵌套表;

      臨時表不支持并行UPDATE、DELETE和MERGE;

      臨時表不支持分布式事務(wù);

      刪除臨時表

      zx@ORCL>drop table temp_transaction;
      
      Table dropped.
      --如果刪除時報錯ORA-14452: attempt to create, alter or drop an index on temporary table already in use說明有會話正在使用臨時表,無法刪除

      參考:

      http://www.cnblogs.com/kerrycode/p/3285936.html

      《9I10G11G編程藝術(shù)  深入數(shù)據(jù)庫體系結(jié)構(gòu)》


      網(wǎng)頁標(biāo)題:Oracle的臨時表
      文章轉(zhuǎn)載:http://www.ef60e0e.cn/article/jgccic.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        弥勒县| 新疆| 理塘县| 宁阳县| 巫溪县| 乐清市| 达拉特旗| 调兵山市| 宜黄县| 外汇| 黑河市| 新绛县| 沾化县| 贞丰县| 海丰县| 广州市| 贵南县| 兖州市| 班戈县| 广水市| 交口县| 山西省| 玛纳斯县| 雅江县| 濮阳市| 会东县| 凤台县| 沙田区| 丰县| 古田县| 呈贡县| 门头沟区| 兰溪市| 宁南县| 郸城县| 黎城县| 宁德市| 松溪县| 广丰县| 太白县| 大余县|