程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle中的臨時表用法匯總

Oracle中的臨時表用法匯總

編輯:關於Oracle數據庫

  說明:下文中的一些說明和示例代碼摘自CSDN,恕不一一指明出處,在此一並對相關作者表示感謝!

  1 語法

  在Oracle中,可以創建以下兩種臨時表:

  1) 會話特有的臨時表

  CREATE GLOBAL TEMPORARY ( )

  ON COMMIT PRESERVE ROWS;

  2) 事務特有的臨時表

  CREATE GLOBAL TEMPORARY ( )
  ON COMMIT DELETE ROWS;
  CREATE GLOBAL TEMPORARY TABLE MyTempTable

  所建的臨時表雖然是存在的,但是如果insert 一條記錄然後用別的連接登上去select,記錄是空的。 

  --ON COMMIT DELETE ROWS 說明臨時表是事務指定,每次提交後ORACLE將截斷表(刪除全部行)

  --ON COMMIT PRESERVE ROWS 說明臨時表是會話指定,當中斷會話時ORACLE將截斷表。 

  2 動態創建

  create or replace procedure pro_temp(v_col1 varchar2,v_col2 varchar2) as
  v_num number;
  begin
  select count(*) into v_num from user_tables where table_name='T_TEMP';  
  --create temporary table
  if v_num<1 then
  execute immediate 'CREATE GLOBAL TEMPORARY TABLE T_TEMP (
  COL1 VARCHAR2(10),
  COL2 VARCHAR2(10)
  ) ON COMMIT delete ROWS';
  end if;  
  --insert data
  execute immediate 'insert into t_temp values('''  v_col1  ''','''  v_col2  ''')';  
  execute immediate 'select col1 from t_temp' into v_num;
  dbms_output.put_line(v_num);
  execute immediate 'delete from t_temp';
  commit;
  execute immediate 'drop table t_temp';
  end pro_temp;  

  測試:  
  15:23:54 SQL> set serveroutput on

  15:24:01 SQL> exec pro_temp('11','22');

  11  

  PL/SQL 過程已成功完成。  
  已用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved