最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

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

新聞中心

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

臨時(shí)表概念

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

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

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

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

基本語(yǔ)法

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

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

臨時(shí)表分類

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

1.ON COMMIT DELETE ROWS

它是臨時(shí)表的默認(rèn)參數(shù),表示臨時(shí)表中的數(shù)據(jù)僅在事物過(guò)程(Transaction)中有效,當(dāng)事物提交(COMMIT)后,臨時(shí)表的暫時(shí)段將被自動(dòng)截?cái)啵═RUNCATE)。

2.ON COMMIT PRESERVE ROWS

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

臨時(shí)表使用演示

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

--創(chuàng)建臨時(shí)表
zx@ORCL>create global temporary table temp_transaction
  2  (id number,
  3  name varchar2(10) )
  4  on commit delete rows;

Table created.
--session1插入測(cè)試數(shù)據(jù)
zx@ORCL>insert into temp_transaction values (1,'zx');

1 row created.

zx@ORCL>select * from temp_transaction;

        ID NAME
---------- ------------------------------
         1 zx
--同時(shí)session2查詢臨時(shí)表并插入測(cè)試數(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;

未選定行

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

2.基于會(huì)話的臨時(shí)表

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ù)還在
--退出會(huì)話重新進(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

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

查看臨時(shí)表的存在

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

臨時(shí)表用途

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

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

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

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

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

臨時(shí)表的限制

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

臨時(shí)表不可以有外鍵;

臨時(shí)表不能包含嵌套表;

臨時(shí)表不支持并行UPDATE、DELETE和MERGE;

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

刪除臨時(shí)表

zx@ORCL>drop table temp_transaction;

Table dropped.
--如果刪除時(shí)報(bào)錯(cuò)ORA-14452: attempt to create, alter or drop an index on temporary table already in use說(shuō)明有會(huì)話正在使用臨時(shí)表,無(wú)法刪除

參考:

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

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


本文題目:Oracle的臨時(shí)表
鏈接地址:http://fisionsoft.com.cn/article/jgccic.html