1. 程式人生 > >在oracle存儲過程中創建暫時表

在oracle存儲過程中創建暫時表

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存儲過程中創建暫時表