Oracle 學習系列之二(會話與事務級臨時表和dual表 )


一、 會話臨時表

--創建會話臨時表
create global temporary table tmp_user_session(user_id int, user_name varchar2(20),user_email varchar2(30))
--這句表示 當事務提交時 保留數據
on commit preserve rows

--向臨時表中插入數據
insert into tmp_user_session(user_id,user_name,user_email) values(1,'孫業寶','948987600@qq.com')
insert into tmp_user_session(user_id,user_name,user_email) values(1,'王麗莎','934560@qq.com')
commit
--查詢 有數據
select * from tmp_user_session
--重新打開 一個sql窗口 再次查詢 則無數據了 select * from tmp_user_session 說明此插入的數據 只為本窗口會話存在



二、創建事務臨時表
--創建事務臨時表
create global temporary table tmp_users_transaction (user_id int,user_name varchar2(20),user_email varchar2(30))
--這句表示 當事務提交時 刪除數據
 on commit delete rows
 
 --向臨時表中插入數據
insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'孫業寶','948987600@qq.com');
insert into tmp_users_transaction(user_id,user_name,user_email) values(1,'王麗莎','934560@qq.com')

--查詢 有數據
select * from tmp_users_transaction
--提交下語句 或者回滾事務 rollback  再次查詢   select * from tmp_users_transaction  就沒有數據了 因為事務臨時表 就是在事務提交時 就數據清空了
commit;rollback;

--查看臨時表的表空間,其實他們的表空間為空
  select table_name, tablespace_name
    from user_tables
   where table_name = 'T_USERS'
      or table_name = 'TMP_USERS_SESSION'
      or table_name = 'TMP_USERS_TRANSACTION'

臨時表的應用場景
  1.大表分割
         眾所周知,為表創建合適的索引可以在很大程度上提高數據查詢的速度。但是當某個表的數據量相當大,例如數據量為億級時,那么創建索引將會花費大量的時間,而且,查詢大的索引表,與直接查詢數據表相比,在性能上幾乎沒有任何優勢,此時,一個常用的方法就是分割大表,例如:將大表分割為多個小的臨時表,然后對這些小表進行相應操作,最后對所有查詢結果進行綜合處理。
  2.解決並行問題
         當多個進程同時對某張表進行操作時,往往會出現並行問題。
 3.作為數據緩存
    在程序段,可能需要對若干數據進行復雜運算。此時,可以創建一個臨時表,並將這些數據存儲在臨時表中。因為可以像操作普通表一樣操作臨時表,這樣,許多函數和sql語句都可以用來處理這些數據。

 

三、特殊表 dual

 

特殊表 dual 該表是每個數據庫創建時默認生成的。該表僅有一列一行,在數據庫開發中有着非常特殊的作用。
    1.分析dual表 執行
                select * from dual可以看出dual 只有一行一列。
    2. dual表的應用場景
              在oracle數據庫中,dual表實際上是作為一個虛表的概念存在的。也就是說dual表存在的意義並非為了存儲數據。更多的時候,dual表用來作為 from的源表。因為oracle的查詢語句必須滿足 select * from table name 語法格式,其中的from所指向的表是必須的,所以即使某些數據不屬於任何表,也必須有一個強制的表名。dual表即可用做這個強制的虛表。
--查看dual表結構
select * from dual
--查詢數據當前日期
select sysdate from dual
--計算結果
select 3*4-3 as results ,8-9 as plus from dual


免責聲明!

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



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