真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle如何建臨時表 oracle建立臨時表

ORACLE臨時表的應(yīng)用

前言

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、做網(wǎng)站、昆山網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、昆山網(wǎng)絡(luò)營銷、昆山企業(yè)策劃、昆山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供昆山建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

目前所有使用Oracle作為數(shù)據(jù)庫支撐平臺的應(yīng)用 大部分數(shù)據(jù)量比較龐大的系統(tǒng) 即表的數(shù)據(jù)量一般情況下都是在百萬級以上的數(shù)據(jù)量 當然在Oracle 中創(chuàng)建分區(qū)是一種不錯的選擇 但是當你發(fā)現(xiàn)你的應(yīng)用有多張表關(guān)聯(lián)的時候 并且這些表大部分都是比較龐大 而你關(guān)聯(lián)的時候發(fā)現(xiàn)其中的某一張或者某幾張表關(guān)聯(lián)之后得到的結(jié)果集非常小并且查詢得到這個結(jié)果集的速度非常快 那么這個時候我考慮在Oracle中創(chuàng)建 臨時表

我對臨時表的理解 在Oracle中創(chuàng)建一張表 這個表不用于其他的什么功能 主要用于自己的軟件系統(tǒng)一些特有功能才用的 而當你用完之后表中的數(shù)據(jù)就沒用了 Oracle的臨時表創(chuàng)建之后基本不占用表空間 如果你沒有指定臨時表(包括臨時表的索引)存放的表空的時候 你插入到臨時表的數(shù)據(jù)是存放在 ORACLE系統(tǒng)的臨時表空間中(TEMP)

臨時表的創(chuàng)建

創(chuàng)建Oracle臨時表 可以有兩種類型的臨時表 會話級的臨時表和事務(wù)級的臨時表

)會話級的臨時表因為這這個臨時表中的數(shù)據(jù)和你的當前會話有關(guān)系 當你當前SESSION不退出的情況下 臨時表中的數(shù)據(jù)就還存在 而當你退出當前 SESSION的時候 臨時表中的數(shù)據(jù)就全部沒有了 當然這個時候你如果以另外一個SESSION登陸的時候是看不到另外一個SESSION中插入到臨時表中的數(shù)據(jù)的 即兩個不同的SESSION所插入的數(shù)據(jù)是互不相干的 當某一個SESSION退出之后臨時表中的數(shù)據(jù)就被截斷(truncate table 即數(shù)據(jù)清空)了 會話級的臨時表創(chuàng)建方法 Create Global Temporary Table Table_Name(Col Type Col Type ……) On Commit Preserve Rows 舉例create global temporary table Student(Stu_id Number( ) Class_id Number( ) Stu_Name Varchar ( ) Stu_Memo varchar ( )) on Commit Preserve Rows

)事務(wù)級臨時表是指該臨時表與事務(wù)相關(guān) 當進行事務(wù)提交或者事務(wù)回滾的時候 臨時表中的數(shù)據(jù)將自行被截斷 其他的內(nèi)容和會話級的臨時表的一致(包括退出 SESSION的時候 事務(wù)級的臨時表也會被自動截斷) 事務(wù)級臨時表的創(chuàng)建方法 Create Global Temporary Table Table_Name(Col Type Col Type ……) On Commit Delete Rows 舉例 create global temporary table Classes(Class_id Number( ) Class_Name Varchar ( ) Class_Memo varchar ( )) on Commit delete Rows

) 兩種不通類型的臨時表的區(qū)別 語法上 會話級臨時表采用on mit preserve rows而事務(wù)級則采用on mit delete rows 用法上 會話級別只有當會話結(jié)束臨時表中的數(shù)據(jù)才會被截斷 而且事務(wù)級臨時表則不管是mit rollback或者是會話結(jié)束 臨時表中的數(shù)據(jù)都將被截斷

例子

) 會話級(Session關(guān)閉掉之后數(shù)據(jù)就沒有了 當Commit的時候則數(shù)據(jù)還在 當Rollback的時候則數(shù)據(jù)也是一樣被回滾)

insert into student(stu_idfp class='fp-tqsh0'/fpclass_idfp class='fp-tqsh0'/fpstu_namefp class='fp-sqkcc'/fpstu_memo) values(fp class='fp-34cnd'/fpfp class='fp-tqsh0'/fpfp class='fp-x9mhj'/fpfp class='fp-sqkcc'/fpfp class='fp-r74kb'/fpfp class='fp-r74kb'/fp張三fp class='fp-4stpj'/fpfp class='fp-wl5fd'/fpfp class='fp-7aprw'/fpfp class='fp-4stpj'/fpfp class='fp-4stpj'/fp福建fp class='fp-r74kb'/fpfp class='fp-wl5fd'/fp);insert into student(stu_idfp class='fp-sesat'/fpclass_idfp class='fp-sesat'/fpstu_namefp class='fp-7aprw'/fpstu_memo) values(fp class='fp-l0mcy'/fpfp class='fp-sqkcc'/fpfp class='fp-x9mhj'/fpfp class='fp-sqkcc'/fpfp class='fp-wl5fd'/fpfp class='fp-4stpj'/fp劉德華fp class='fp-r74kb'/fpfp class='fp-ctqx3'/fpfp class='fp-sqkcc'/fpfp class='fp-wl5fd'/fpfp class='fp-ctqx3'/fp福州fp class='fp-ctqx3'/fpfp class='fp-ctqx3'/fp);insert into student(stu_idfp class='fp-tqsh0'/fpclass_idfp class='fp-tqsh0'/fpstu_namefp class='fp-7aprw'/fpstu_memo) values(fp class='fp-kc69s'/fpfp class='fp-sesat'/fpfp class='fp-3f4pw'/fpfp class='fp-sqkcc'/fpfp class='fp-wl5fd'/fpfp class='fp-wl5fd'/fpSfp class='fp-gocz4'/fpHfp class='fp-rqc8n'/fpEfp class='fp-4stpj'/fpfp class='fp-wl5fd'/fpfp class='fp-7aprw'/fpfp class='fp-wl5fd'/fpfp class='fp-4stpj'/fp廈門fp class='fp-r74kb'/fpfp class='fp-4stpj'/fp);SQL select *from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO 張三 福建 劉德華 福州 S H E 廈門 張惠妹 廈門

SQL mit;Commit pleteSQL select * from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO 張三 福建 劉德華 福州 S H E 廈門 張惠妹 廈門

SQLinsert into student(stu_idfp class='fp-sqkcc'/fpclass_idfp class='fp-tqsh0'/fpstu_namefp class='fp-tqsh0'/fpstu_memo) values(fp class='fp-t29dz'/fpfp class='fp-7aprw'/fpfp class='fp-3f4pw'/fpfp class='fp-tqsh0'/fpfp class='fp-4stpj'/fpfp class='fp-r74kb'/fp張惠妹fp class='fp-r74kb'/fpfp class='fp-wl5fd'/fpfp class='fp-sesat'/fpfp class='fp-ctqx3'/fpfp class='fp-wl5fd'/fp廈門fp class='fp-wl5fd'/fpfp class='fp-wl5fd'/fp);fp class='fp-34cnd'/fp row insertedSQL select * from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO 張三 福建 劉德華 福州 S H E 廈門 張惠妹 廈門 張惠妹 廈門

SQL rollback ;Rollback pleteSQL select * from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO 張三 福建 劉德華 福州 S H E 廈門 張惠妹 廈門 SQL

) 事務(wù)級(Commit之后就刪除數(shù)據(jù)) 本例子將采用以下的數(shù)據(jù)

insert into classes(Class_id Class_Name Class_Memo) values( 計算機 ); insert into classes(Class_id Class_Name Class_Memo) values( 經(jīng)濟信息 ); insert into classes(Class_id Class_Name Class_Memo) values( 經(jīng)濟信息 );

在一個SESSION中(比如SQLPLUS登陸)插入上面 條記錄 然后再以另外一個SESSION(用SQLPLUS再登陸一次)登陸 當你 select * from classes 的時候 classes表是空的 而你再第一次登陸的SQLPLUS中select的時候可以查詢到 這個時候你沒有進行mit或者rollback之前你可以對剛才插入的 條記錄進行update delete等操作 當你進行mit或者rollback的時候 這個時候由于你的表是事務(wù)級的臨時表 那么在插入數(shù)據(jù)的session也看不到數(shù)據(jù)了 這個時候數(shù)據(jù)就已經(jīng)被截斷了

運行結(jié)果如下

SQL insert into classes(Class_idfp class='fp-sqkcc'/fpClass_Namefp class='fp-tqsh0'/fpClass_Memo) values(fp class='fp-x9mhj'/fpfp class='fp-sqkcc'/fpfp class='fp-wl5fd'/fpfp class='fp-r74kb'/fp計算機fp class='fp-4stpj'/fpfp class='fp-4stpj'/fpfp class='fp-7aprw'/fpfp class='fp-wl5fd'/fpfp class='fp-ctqx3'/fpfp class='fp-bmr02'/fpfp class='fp-te1fi'/fpfp class='fp-v1pmc'/fpfp class='fp-g5t59'/fpfp class='fp-4stpj'/fpfp class='fp-ctqx3'/fp);fp class='fp-zljnv'/fp row insertedSQL insert into classes(Class_idfp class='fp-sesat'/fpClass_Namefp class='fp-7aprw'/fpClass_Memo) values(fp class='fp-3f4pw'/fpfp class='fp-sqkcc'/fpfp class='fp-ctqx3'/fpfp class='fp-wl5fd'/fp經(jīng)濟信息fp class='fp-r74kb'/fpfp class='fp-ctqx3'/fpfp class='fp-sqkcc'/fpfp class='fp-4stpj'/fpfp class='fp-wl5fd'/fpfp class='fp-jcx54'/fpfp class='fp-9mmx8'/fpfp class='fp-o7rct'/fpfp class='fp-8y5u2'/fpfp class='fp-4stpj'/fpfp class='fp-4stpj'/fp);fp class='fp-k7d4b'/fp row insertedSQL insert into classes(Class_idfp class='fp-tqsh0'/fpClass_Namefp class='fp-sesat'/fpClass_Memo) values(fp class='fp-0x7ni'/fpfp class='fp-tqsh0'/fpfp class='fp-wl5fd'/fpfp class='fp-r74kb'/fp經(jīng)濟信息fp class='fp-wl5fd'/fpfp class='fp-ctqx3'/fpfp class='fp-sqkcc'/fpfp class='fp-r74kb'/fpfp class='fp-wl5fd'/fpfp class='fp-mo3f4'/fpfp class='fp-te1fi'/fpfp class='fp-aa2ze'/fpfp class='fp-h51ax'/fpfp class='fp-4stpj'/fpfp class='fp-r74kb'/fp);fp class='fp-x9mhj'/fp row insertedSQL update classes set class_memo =fp class='fp-4stpj'/fpfp class='fp-r74kb'/fpfp class='fp-4stpj'/fpfp class='fp-wl5fd'/fp where class_id=fp class='fp-h51ax'/fp ;fp class='fp-x9mhj'/fp row updatedSQL select * from classes ;

CLASS_ID CLASS_NAME CLASS_MEMO 計算機 經(jīng)濟信息 經(jīng)濟信息 SQL delete from classes where class_id= ; row deleted SQL select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO 計算機 經(jīng)濟信息 SQL mit; Commit plete SQL select *from classes ; CLASS_ID CLASS_NAME CLASS_MEMO SQL 再重復(fù)插入一次 然后rollback SQL Rollback ; Rollback plete SQL select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO SQL

臨時表的應(yīng)用

) 當某一個SQL語句關(guān)聯(lián)的表在 張及以上 并且和一些小表關(guān)聯(lián) 可以采用將大表進行分拆并且得到比較小的結(jié)果集合存放在臨時表中

) 程序執(zhí)行過程中可能需要存放一些臨時的數(shù)據(jù) 這些數(shù)據(jù)在整個程序的會話過程中都需要用的等等

注意事項

) 臨時表的索引以及對表的修改 刪除等和正常的表是一致的

) Oracle的臨時表是Oracle i才支持的功能特性 如果你的Oracle版本比較低的話 那么就可能沒有辦法用到了 如果你的Oracle 版本是 i的話 你還需要把$ORACLE_HOME/admin/${ORACLE_SID}/pfile目錄下的init ORACLE_SID ora初始參數(shù)配置文件的patible修改為patible = 我的服務(wù)器上就是這樣子配置的 當然也可以修改為patible =

lishixinzhi/Article/program/Oracle/201311/16578

oracle怎樣建立一個臨時表

你這個#AA是臨時表的表名吧,起表名不能用#這樣的符號吧!

alter GLOBAL TEMPORARY TABLE AAA

ON COMMIT DELETE ROWS

AS

SELECT * FROM AA;

Oracle 10g中如何創(chuàng)建表

從數(shù)據(jù)庫用戶角度看,數(shù)據(jù)庫中的數(shù)據(jù)是以表、視圖等方式儲存的。那么用戶自己是怎么創(chuàng)建表的呢?簡單的有兩種方式,一種是用戶可以在Oracle提供的SQL*Plus中使用CREATE TABLE語句創(chuàng)建表,也可以通過OEM圖形化工具創(chuàng)建表。

工具/材料

電腦

Oracle 10g

CREATE TABLE創(chuàng)建表

首先用戶必須要有CREATE TABLE系統(tǒng)權(quán)限,并且只能在自己的模式中創(chuàng)建表,圖中的例子使用CREATE TABLE語句在當前模式中創(chuàng)建了一個共有5列的表:表的名稱為employees,包含 emp_id, name, job,age,dep_id 等5列,后面的number、 varchar2、等為數(shù)據(jù)類型,括號里面為長度。

如果想要在其他模式中創(chuàng)建表,則必須在表名前加上模式名,并且用戶還要有CREATE ANY TABLE系統(tǒng)權(quán)限,例如圖中語句將在SYSTEM模式中創(chuàng)建employees1表

OEM創(chuàng)建表

在OEM主界面中選擇【管理】選項卡,進入如圖所示的數(shù)據(jù)庫管理界面;然后在“數(shù)據(jù)庫對象”中單擊【表】選項。

系統(tǒng)進入管理表界面,在該頁面中單擊【創(chuàng)建】按鈕,進入如圖所示的“創(chuàng)建表的組織形式”界面。在該界面中用戶可以選擇創(chuàng)建的表類型---標準表、臨時表或索引表。

在選擇創(chuàng)建的表類型后,單擊【繼續(xù)】按鈕,進入如圖所示的“創(chuàng)建表”界面。在“名稱”文本框中輸入要創(chuàng)建表的名稱。系統(tǒng)在“方案”文本框中顯示當前模式,這表示新創(chuàng)建的表將屬于該模式。

在“創(chuàng)建表”頁面中選擇“約束條件”選項卡,進入如圖所示的“表約束條件”頁面。該頁面中用戶可以為創(chuàng)建的表定義約束條件,包括主鍵約束(PRIMARY)、唯一約束(UNIQUE)、檢查約束(CHECK)和外鍵(FOREIGN)約束。

設(shè)置儲存參數(shù),選擇“儲存”選項卡,進入如圖所示的儲存設(shè)置界面,最后保存表格,單機【確定】按鈕,系統(tǒng)會根據(jù)用戶對表的設(shè)置,創(chuàng)建一個新表。

oracle存儲中創(chuàng)建并查詢臨時表

Oracle中的臨時表用法匯總

說明:下文中的一些說明和示例代碼摘自CSDN,恕不一一指明出處,在此一并對相關(guān)作者表示感謝! 如果作者有異議,請來信說明

1 語法 在Oracle中,可以創(chuàng)建以下兩種臨時表:

1) 會話特有的臨時表

CREATE GLOBAL TEMPORARY TABLE_NAME (column specification )

ON COMMIT PRESERVE ROWS;

2) 事務(wù)特有的臨時表

CREATE GLOBAL TEMPORARY TABLE_NAME (column specification )

ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY TABLE MyTempTable

所建的臨時表雖然是存在的,但是如果insert 一條記錄然后用別的連接登上去select,記錄是空的。

--ON COMMIT DELETE ROWS 說明臨時表是事務(wù)指定,每次提交后ORACLE將截斷表(刪除全部行)

--ON COMMIT PRESERVE ROWS 說明臨時表是會話指定,當中斷會話時ORACLE將截斷表。

2 動態(tài)創(chuàng)建

create or replace procedure pro_temp(v_col1 varchar2,v_col2 varchar2) as

v_num number;

begin

select count(*) into v_num from user_tables where table_name='T_TEMP';

--create temporary table

if v_num1 then

execute immediate 'CREATE GLOBAL TEMPORARY TABLE T_TEMP (

COL1 VARCHAR2(10),

COL2 VARCHAR2(10)

) ON COMMIT delete ROWS';

end if;

--insert data

execute immediate 'insert into t_temp values('''||v_col1||''','''||v_col2||''')';

execute immediate 'select col1 from t_temp' into v_num;

dbms_output.put_line(v_num);

execute immediate 'delete from t_temp';

commit;

execute immediate 'drop table t_temp';

end pro_temp;

測試:

15:23:54 SQL set serveroutput on

15:24:01 SQL exec pro_temp('11','22');

11

PL/SQL 過程已成功完成。

已用時間: 00: 00: 00.79

15:24:08 SQL desc t_temp;

ERROR:

ORA-04043: 對象 t_temp 不存在

3 特性和性能(與普通表和視圖的比較) 臨時表只在當前連接內(nèi)有效臨時表不建立索引,

所以如果數(shù)據(jù)量比較大或進行多次查詢時,不推薦使用數(shù)據(jù)處理比較復(fù)雜的時候時表快,

反之視圖快點在僅僅查詢數(shù)據(jù)的時候建議用游標: open cursor for 'sql clause';

臨時表的創(chuàng)建

創(chuàng)建Oracle臨時表,可以有兩種類型的臨時表:會話級的臨時表和事務(wù)級的臨時表。

1)會話級的臨時表因為這這個臨時表中的數(shù)據(jù)和你的當前會話有關(guān)系,當你當前SESSION不退出的情況下,臨時表中的數(shù)據(jù)就還存在,而當你退出當前SESSION的時候,臨時表中的數(shù)據(jù)就全部沒有了,當然這個時候你如果以另外一個SESSION登陸的時候是看不到另外一個SESSION中插入到臨時表中的數(shù)據(jù)的。即兩個不同的SESSION所插入的數(shù)據(jù)是互不相干的。當某一個SESSION退出之后臨時表中的數(shù)據(jù)就被截斷(truncate table,即數(shù)據(jù)清空)了。會話級的臨時表創(chuàng)建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2...) On Commit Preserve Rows;舉例create global temporary table Student(Stu_id Number(5),Class_id Number(5),Stu_Name Varchar2(8),Stu_Memo varchar2(200)) on Commit Preserve Rows ;

2)事務(wù)級臨時表是指該臨時表與事務(wù)相關(guān),當進行事務(wù)提交或者事務(wù)回滾的時候,臨時表中的數(shù)據(jù)將自行被截斷,其他的內(nèi)容和會話級的臨時表的一致(包括退出SESSION的時候,事務(wù)級的臨時表也會被自動截斷)。事務(wù)級臨時表的創(chuàng)建方法:Create Global Temporary Table Table_Name(Col1 Type1,Col2 Type2...) On Commit Delete Rows;舉例:create global temporary table Classes(Class_id Number(5),Class_Name Varchar2(8),Class_Memo varchar2(200)) on Commit delete Rows ;

3)、兩種不通類型的臨時表的區(qū)別:語法上,會話級臨時表采用on commit preserve rows而事務(wù)級則采用on commit delete rows;用法上,會話級別只有當會話結(jié)束臨時表中的數(shù)據(jù)才會被截斷,而且事務(wù)級臨時表則不管是commit、rollback或者是會話結(jié)束,臨時表中的數(shù)據(jù)都將被截斷。

例子:

1)、會話級(Session關(guān)閉掉之后數(shù)據(jù)就沒有了,當Commit的時候則數(shù)據(jù)還在,當Rollback的時候則數(shù)據(jù)也是一樣被回滾):

insert into student(stu_id,class_id,stu_name,stu_memo) values(1,1,'張三','福建');

insert into student(stu_id,class_id,stu_name,stu_memo) values(2,1,'劉德華','福州');

insert into student(stu_id,class_id,stu_name,stu_memo) values(3,2,'S.H.E','廈門');

SQL select *from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO

------ -------- -------- --------------------------------------------------------------------------------

1 1 張三 福建

2 1 劉德華 福州

3 2 S.H.E 廈門

4 2 張惠妹 廈門

SQL commit;

Commit complete

SQL select * from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO

------ -------- -------- --------------------------------------------------------------------------------

1 1 張三 福建

2 1 劉德華 福州

3 2 S.H.E 廈門

4 2 張惠妹 廈門

SQLinsert into student(stu_id,class_id,stu_name,stu_memo) values(4,2,'張惠妹','廈門');

1 row inserted

SQL select * from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO

------ -------- -------- --------------------------------------------------------------------------------

1 1 張三 福建

2 1 劉德華 福州

3 2 S.H.E 廈門

4 2 張惠妹 廈門

4 2 張惠妹 廈門

SQL rollback ;

Rollback complete

SQL select * from student ;

STU_ID CLASS_ID STU_NAME STU_MEMO

------ -------- -------- --------------------------------------------------------------------------------

1 1 張三 福建

2 1 劉德華 福州

3 2 S.H.E 廈門

4 2 張惠妹 廈門

SQL

2)、事務(wù)級(Commit之后就刪除數(shù)據(jù)):本例子將采用以下的數(shù)據(jù):

insert into classes(Class_id,Class_Name,Class_Memo) values(1,'計算機','9608');

insert into classes(Class_id,Class_Name,Class_Memo) values(2,'經(jīng)濟信息','9602');

insert into classes(Class_id,Class_Name,Class_Memo) values(3,'經(jīng)濟信息','9603');

在一個SESSION中(比如SQLPLUS登陸)插入上面3條記錄,然后再以另外一個SESSION(用SQLPLUS再登陸一次)登陸,當你select * from classes;的時候,classes表是空的,而你再第一次登陸的SQLPLUS中select的時候可以查詢到,這個時候你沒有進行commit或者rollback之前你可以對剛才插入的3條記錄進行update、delete等操作,當你進行commit或者rollback的時候,這個時候由于你的表是事務(wù)級的臨時表,那么在插入數(shù)據(jù)的session也看不到數(shù)據(jù)了,這個時候數(shù)據(jù)就已經(jīng)被截斷了。

運行結(jié)果如下:

SQL insert into classes(Class_id,Class_Name,Class_Memo) values(1,'計算機','9608');

1 row inserted

SQL insert into classes(Class_id,Class_Name,Class_Memo) values(2,'經(jīng)濟信息','9602');

1 row inserted

SQL insert into classes(Class_id,Class_Name,Class_Memo) values(3,'經(jīng)濟信息','9603');

1 row inserted

SQL update classes set class_memo ='' where class_id=3 ;

1 row updated

SQL select * from classes ;

CLASS_ID CLASS_NAME CLASS_MEMO

-------- ---------- --------------------------------------------------------------------------------

1 計算機 9608

2 經(jīng)濟信息 9602

3 經(jīng)濟信息

SQL delete from classes where class_id=3 ;

1 row deleted

SQL select * from classes ;

CLASS_ID CLASS_NAME CLASS_MEMO

-------- ---------- --------------------------------------------------------------------------------

1 計算機 9608

2 經(jīng)濟信息 9602

SQL commit;

Commit complete

SQL select *from classes ;

CLASS_ID CLASS_NAME CLASS_MEMO

-------- ---------- --------------------------------------------------------------------------------

SQL

再重復(fù)插入一次,然后rollback。

SQL Rollback ;

Rollback complete

SQL select * from classes ;

CLASS_ID CLASS_NAME CLASS_MEMO

-------- ---------- --------------------------------------------------------------------------------

SQL

臨時表的應(yīng)用

1)、當某一個SQL語句關(guān)聯(lián)的表在2張及以上,并且和一些小表關(guān)聯(lián)??梢圆捎脤⒋蟊磉M行分拆并且得到比較小的結(jié)果集合存放在臨時表中。

2)、程序執(zhí)行過程中可能需要存放一些臨時的數(shù)據(jù),這些數(shù)據(jù)在整個程序的會話過程中都需要用的等等。

5、注意事項:

1)、臨時表的索引以及對表的修改、刪除等和正常的表是一致的。

2)、Oracle的臨時表是Oracle8i才支持的功能特性,如果你的Oracle版本比較低的話,那么就可能沒有辦法用到了,如果你的Oracle版本是8i的話,你還需要把$ORACLE_HOME/admin/${ORACLE_SID}/pfile目錄下的initORACLE_SID.ora初始參數(shù)配置文件的compatible修改為compatible = "8.1.0",我的服務(wù)器上就是這樣子配置的。當然也可以修改為compatible = "8.1.6"

Oracle臨時表創(chuàng)建的基本語句是什么?

Oracle創(chuàng)建臨時表的語法如下:

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中,可以創(chuàng)建以下兩種臨時表:

1) 會話特有的臨時表

CREATE GLOBAL TEMPORARY ( )

ON COMMIT PRESERVE ROWS;

2) 事務(wù)特有的臨時表

CREATE GLOBAL TEMPORARY ( )

ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY TABLE MyTempTable

在oracle可以創(chuàng)建臨時表嗎

oracle可以創(chuàng)建臨時表,ORACLE臨時表有兩種類型:會話級的臨時表和事務(wù)級的臨時表。

1)ON COMMIT DELETE ROWS

它是臨時表的默認參數(shù),表示臨時表中的數(shù)據(jù)僅在事物過程(Transaction)中有效,當事物提交(COMMIT)后,臨時表的暫時段將被自動截斷(TRUNCATE),但是臨時表的結(jié)構(gòu) 以及元數(shù)據(jù)還存儲在用戶的數(shù)據(jù)字典中。如果臨時表完成它的使命后,最好刪除臨時表,否則數(shù)據(jù)庫會殘留很多臨時表的表結(jié)構(gòu)和元數(shù)據(jù)。

2)ON COMMIT PRESERVE ROWS

它表示臨時表的內(nèi)容可以跨事物而存在,不過,當該會話結(jié)束時,臨時表的暫時段將隨著會話的結(jié)束而被丟棄,臨時表中的數(shù)據(jù)自然也就隨之丟棄。但是臨時表的結(jié)構(gòu)以及元數(shù)據(jù)還存儲在用戶的數(shù)據(jù)字典中。如果臨時表完成它的使命后,最好刪除臨時表,否則數(shù)據(jù)庫會殘留很多臨時表的表結(jié)構(gòu)和元數(shù)據(jù)。

1:會話級的臨時表的數(shù)據(jù)和你當前會話有關(guān)系,當前SESSION不退出的情況下,臨時表中的數(shù)據(jù)就還存在,臨時表的數(shù)據(jù)只有當你退出當前SESSION的時候才被截斷(TRUNCATE TABLE),如下所示:

會話級別的臨時表創(chuàng)建:

CREATE GLOBAL TEMPORARY TABLE TMP_TEST

(

ID NUMBER ,

NAME VARCHAR2(32)

) ON COMMIT PRESERVE ROWS;

CREATE GLOBAL TEMPORARY TABLE TMP_TEST ON COMMIT PRESERVE ROWS

AS

SELECT * FROM TEST;

操作示例:

SQL CREATE GLOBAL TEMPORARY TABLE TMP_TEST

(

ID NUMBER ,

NAME VARCHAR2(32)

) ON COMMIT PRESERVE ROWS;

Table created

SQL INSERT INTO TMP_TEST

SELECT 1, 'kerry' FROM DUAL;

1 row inserted

SQL COMMIT;

Commit complete

SQL SELECT * FROM TMP_TEST;

ID NAME

---------- ----------------

1 kerry

SQL INSERT INTO TMP_TEST

SELECT 2, 'rouce' FROM DUAL;

1 row inserted

SQL ROLLBACK;

Rollback complete

SQL SELECT * FROM TMP_TEST;

ID NAME

---------- ----------------------

1 kerry

SQL

2:事務(wù)級的臨時表(默認),這種類型的臨時表與事務(wù)有關(guān),當進行事務(wù)提交或者事務(wù)回滾的時候,臨時表的數(shù)據(jù)將自行截斷,即當COMMIT或ROLLBACK時,數(shù)據(jù)就會被TRUNCATE掉,其它的特性和會話級的臨時表一致。

事務(wù)級臨時表的創(chuàng)建方法:

CREATE GLOBAL TEMPORARY TABLE TMP_TEST

(

ID NUMBER ,

NAME VARCHAR2(32)

) ON COMMIT DELETE ROWS;

CREATE GLOBAL TEMPORARY TABLE TMP_TEST ON COMMIT DELETE AS SELECT * FROM TEST;

SQL CREATE GLOBAL TEMPORARY TABLE TMP_TEST

(

ID NUMBER ,

NAME VARCHAR2(32)

) ON COMMIT DELETE ROWS;

Table created

SQL INSERT INTO TMP_TEST

SELECT 1, 'kerry' FROM DUAL;

1 row inserted

SQL SELECT * FROM TMP_TEST;

ID NAME

---------- ----------------------

1 kerry

SQL COMMIT;

Commit complete

SQL SELECT * FROM TMP_TEST;

ID NAME

---------- ------------------------

SQL


網(wǎng)頁名稱:oracle如何建臨時表 oracle建立臨時表
標題路徑:http://weahome.cn/article/hgjsee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部