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

2021-09-07 12:33:06 字數 977 閱讀 7671

在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儲存過程中建立臨時表

create procedure pro asstr varchar2 100 begin str create global temporary table tablename col1 varchar2 10 col2 number on mit preserve rows execute im...

在ORACLE儲存過程中建立臨時表

create procedure pro asstr varchar2 100 begin str create global temporary table tablename col1 varchar2 10 col2 number on commit preserve rows execute...

在ORACLE儲存過程中建立臨時表

在oracle儲存過程中建立臨時表 儲存過程裡不能直接使用ddl語句,所以只能使用動態sql語句來執行 on commit delete rows 說明臨時表是事務指定,每次提交後oracle將截斷表 刪除全部行 on commit preserve rows 說明臨時表是會話指定,當中斷會話時or...