Oracle臨時表的功能與應用


什么是臨時表,用戶做一個操作查詢出幾百幾千條數據,我們可以把數據放在內存中。當有很多用戶都這樣做,內存空間不足,這個時候就需要把數據保存在磁盤上。對於 oracle 就提供了一種臨時表用於存放這些數據。
 
事務級
會話級
 
on commit preserve rows --session 臨時表
on commit delete rows --transaction 臨時表
 
下面演示創建一個事務級別與會話級別的兩個臨時表
 
SQL> conn test/test
Connected.
SQL> desc test; 
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(10)

 

在 sys 下創建 sessione 級別的臨時表
SQL> conn / as sysdba
Connected.
SQL> create global temporary table session_test on commit preserve rows as select * from test.test;
Table created.
SQL> commit; Commit complete.

  

on commit preserve rows 表示創建的表是 session 級別,只要用戶不退出,臨時表一直有效。
 
SQL> select * from session_test;

        ID NAME
---------- ----------
         0 orcl
         1 orcl
         3 orcl
         2 orcl

  

退出並重新進入,並驗證表內容是否存在。

SQL> exit
……

SQL> select * from session_test; no rows selected SQL>

  

查看 session 級別的臨時表在斷開連接后,重新登錄查看變為空了。

 

接下來創建事務級別的臨時表

SQL> create global temporary table transaction_test on commit delete rows as select * from test.test;

Table created.

  

on commit delete rows 表示創建的表是事務級別,這個臨時表的作用范圍只在一個事務內有效。

驗證事務臨時表的作用范圍:
雖然是 copy 的 test.test 表,但是依然是沒有數據。

SQL> select * from transaction_test;

no rows selected

  

接下來添加數據到事務臨時表 transaction_test

SQL> insert into transaction_test select * from test.test; 

4 rows created.

SQL> select * from transaction_test;

        ID NAME
---------- ----------
         0 orcl
         1 orcl
         3 orcl
         2 orcl

  

如上我們將 test.test 表的內容插入到了 transaction_test 表中,然后直接查詢,能查到剛剛插入的數據。

接下來提交,並查詢。(提交相當於提交事務,也就是一個事務的結束)

SQL> select * from transaction_test;

        ID NAME
---------- ----------
         0 orcl
         1 orcl
         3 orcl
         2 orcl

SQL> commit;

Commit complete.

SQL> select * from transaction_test;

no rows selected

  

由此可見

會話級別的臨時表,只要會話不斷開,臨時表一直有效,會話斷開后,臨時表內容清空;
事務級別的臨時表,只在一個事務內有效,事務提交后,臨時表內容清空。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM