|
臨時(shí)表的特點(diǎn):
1. 多用戶操作的獨(dú)立性:對(duì)于使用同一張臨時(shí)表的不同用戶,ORACLE都會(huì)分配一個(gè)獨(dú)立的臨時(shí)表,這樣就避免了多個(gè)用戶在對(duì)同一張臨時(shí)表操作時(shí)發(fā)生交叉,從而保證了多個(gè)用戶操作的并發(fā)性和獨(dú)立性; 2. 數(shù)據(jù)的臨時(shí)性:既然是臨時(shí)表,顧名思義,存放在該表中的數(shù)據(jù)是臨時(shí)性的。ORACLE根據(jù)你創(chuàng)建臨時(shí)表時(shí)指定的參數(shù)(On Commit Delete Rows / On Commit Preserve Rows),自動(dòng)將數(shù)據(jù)TRUNCATE掉。 臨時(shí)表的不足: 1. 不支持lob對(duì)象,這也許是設(shè)計(jì)者基于運(yùn)行效率的考慮,但實(shí)際應(yīng)用中確實(shí),要此功能時(shí)就無法使用臨時(shí)表了。 2. 不支持主外鍵關(guān)系。 臨時(shí)表用于何處 在對(duì)多表做關(guān)聯(lián)查詢時(shí),其中每張表的數(shù)據(jù)量都比較大,而多表關(guān)聯(lián)后,所得到的結(jié)果集確是相當(dāng)?shù)男∏也樵兊慕Y(jié)果的速度比較快,那么這時(shí)可以考慮用臨時(shí)表。 臨時(shí)表分兩種類型的臨時(shí)表: 1. 會(huì)話級(jí)臨時(shí)表 2. 事物級(jí)臨時(shí)表 臨時(shí)表:顧明思義,存在該表的數(shù)據(jù)是臨時(shí)的。 會(huì)話臨時(shí)表:該臨時(shí)表肯定與會(huì)話有關(guān)。會(huì)話在不退出時(shí),則些臨時(shí)表中的數(shù)據(jù)存在,會(huì)話退出,該臨時(shí)表中的數(shù)據(jù)也會(huì)隨之消失。在多用戶操作的情況下,一個(gè)會(huì)話從來不阻塞另一個(gè)會(huì)話使用臨時(shí)表。即使鎖定臨時(shí)表,一個(gè)會(huì)話也不會(huì)阻塞其他會(huì)話使用臨時(shí)表。其語法為: Create global temporary table table_name (col1 type1, col2 type2 …) On commit preserve rows; 示例: Create global temporary table temp_emp (empno number(8), Ename varchar2(30), Sal number(8,2) ) On commit preserve rows; 事物臨時(shí)表:指該臨時(shí)表與事務(wù)相關(guān),當(dāng)進(jìn)行事務(wù)提交或者事務(wù)回滾的時(shí)候,臨時(shí)表中的數(shù)據(jù)將自行被截?cái)?,其他的?nèi)容和會(huì)話級(jí)的臨時(shí)表的一致(包括退出SESSION的時(shí)候,事務(wù)級(jí)的臨時(shí)表也會(huì)被自動(dòng)截?cái)啵UZ法為: Create global temporary table table_name (col1 type1, col2 type2 …) On commit delete rows; 示例: Create global temporary table temp_dept (d_no number(4), D_name varchar2(30), D_num number(8) ) On commit delete rows; 會(huì)話臨時(shí)表和事物臨時(shí)表的區(qū)別: 在語法上,會(huì)話臨時(shí)表采用on commit preserve rows,而事物臨時(shí)表采用on commit delete rows;在用途上,會(huì)話級(jí)臨時(shí)表只會(huì)在會(huì)話結(jié)束時(shí),臨時(shí)表中的數(shù)據(jù)才會(huì)被截?cái)?。而事物臨時(shí)表則不管是在事物提交(commit)、事物回滾(rollback)或會(huì)話結(jié)束,臨時(shí)表中的數(shù)據(jù)都會(huì)被截?cái)唷?nbsp; |
|
|