create global temporary table tablename (
col1 varchar2(10),
col2 number
) on commit preserve(delete) rows ;
這種臨時表不占用表空間,而且不同的session之間互相看不到對方的資料
在會話結束後表中的資料自動清空,如果選了delete rows,則在提交的時候即清空資料,preserve則一直到會話結束
在oracle8i中,可以建立以下兩種臨時表:
(1)會話特有的臨時表
create global temporary ()
on commit preserve rows;
(2)事務特有的臨時表
create global temporary ()
on commit delete rows;
create global temporary table mytemptable
所建的臨時表雖然是存在的,但是你試一下insert 一條記錄然後用別的連線登上去select,記錄是空的,明白了吧,我把下面兩句話再貼一下:
--on commit delete rows 說明臨時表是事務指定,每次提交後oracle將截斷表(刪除全部行)
--on commit preserve rows 說明臨時表是會話指定,當中斷會話時oracle將截斷表。
衝突的問題更本不用考慮.
臨時表只是儲存當前會話(session)用到的資料,資料只在事務或會話期間存在。
通過create global temporary table命令建立乙個臨時表,對於事務型別的臨時表,
資料只是在事務期間存在,對於會話型別的臨時表,資料在會話期間存在。
會話的資料對於當前會話私有。每個會話只能看到並修改自己的資料。dml鎖不會加到
臨時表的資料上。下面的語句控制行的存在性。
● on commit delete rows 表名行只是在事務期間可見
● on commit preserve rows 表名行在整個會話期間可見
可以對臨時表建立索引,檢視,出發器,可以用export和import工具匯入匯出表的
定義,但是不能匯出資料。表的定義對所有的會話可見。
例如:create global temporary table temp_tab1(
table_name varchar2(20),
primary_key varchar2(100),
field varchar2(1000))
on commit preserve rows;
create global temporary table temp_tab2(
table_name varchar2(20),
primary_key varchar2(100),
field varchar2(1000))
on commit delete rows;
Oracle 臨時表用法
oracle的臨時表在應用系統中有很大的作用,它可以讓使用者只能夠操作各自的資料中而互不干擾,不用擔心會破壞或影響其他session transaction的資料,這也是資料安全的一種解決方法。臨時表分為session transaction兩種,session級的臨時表資料在整個session都存...
Oracle 臨時表用法
oracle的臨時表在應用系統中有很大的作用,它可以讓使用者只能夠操作各自的資料中而互不干擾,不用擔心會破壞或影響其他session transaction的資料,這也是資料安全的一種解決方法。臨時表分為session transaction兩種,session級的臨時表資料在整個session都存...
Oracle 臨時表用法
oracle的臨時表在應用系統中有很大的作用,它可以讓使用者只能夠操作各自的資料中而互不干擾,不用擔心會破壞或影響其他session transaction的資料,這也是資料安全的一種解決方法。臨時表分為session transaction兩種,session級的臨時表資料在整個session都存...