在oracle存儲過程中創建暫時表
阿新 • • 發佈:2017-06-26
alter create article tracking 級別 gin char repl 提交
在oracle的存儲過程中,不能直接使用DDL語句,比方create、alter、drop、truncate等。
那假設我們想在存儲過程中建立一張暫時表就僅僅能使用動態sql語句了:
create or replace procedure pro as str_sql varchar2(100); begin -- 創建暫時表 str_sql := ‘create global temporary table temp_table ( col1 varchar2(10), col2 number ) on commit preserve rows‘; execute immediate str_sql; -- 使用暫時表 str_sql := ‘insert into temp_table(col1, col2) values(‘‘a‘‘, 1)‘; execute immediate str_sql; -- 刪除暫時表 str_sql := ‘drop table temp_table‘; execute immediate str_sql; end;
在oracle中。暫時表分為會話級別(session)和事務級別(transaction)兩種。
會話級的暫時表在整個會話期間都存在,直到會話結束;事務級別的暫時表數據在transaction結束後消失。即commit/rollback或結束會話時,
會清除暫時表數據。
on commit preserve rows -- 會話級別暫時表(退出登錄會結束會話)
on commit delete rows -- 事務級別暫時表(提交或回滾會結束事務)
暫時表優缺點:
1. 在只查詢數據時建議使用遊標。
2. 暫時表不會建立索引。所以假設數據量比較大或進行多次查詢時,不推薦使用。
在oracle存儲過程中創建暫時表