语法 在Oracle中 可以创建以下两种临时表 ) 会话特有的临时表 CREATE GLOBAL TEMPORARY( ) ON MIT PRESERVE ROWS ) 事务特有的临时表 CREATE GLOBAL TEMPORARY( ) ON MIT DELETE ROWS CREATE GLOBAL TEMPORARY TABLE MyTempTable 所建的临时表虽然是存在的 但是如果insert 一条记录然后用别的连接登上去select 记录是空的 ON MIT DELETE ROWS 说明临时表是事务指定 每次提交后ORACLE将截断表(删除全部行) ON MIT PRESERVE ROWS 说明临时表是会话指定 当中断会话时ORACLE将截断表 动态创建 create or replace procedure pro_temp(v_col varchar v_col varchar ) as v_num number; begin select count(*) into v_num from user_tables where table_name= T_TEMP ; create temporary table if v_num< then execute immediate CREATE GLOBAL TEMPORARY TABLE T_TEMP ( COL VARCHAR ( ) COL VARCHAR ( ) ) ON MIT delete ROWS ; end if; insert data execute immediate insert into t_temp values( v_col v_col ) ; execute immediate select col from t_temp into v_num; dbms_output put_line(v_num); execute immediate delete from t_temp ; mit; execute immediate drop table t_temp ; end pro_temp; 测试: : : SQL> set serveroutput on : : SQL> exec pro_temp( ); PL/SQL 过程已成功完成 已用时间: : : : : SQL> desc t_temp; ERROR ORA : 对象 t_temp 不存在 通过查询创建临时表 create proecdure name_pro as str varchar ( ); begin str:= CREATE GLOBAL TEMPORARY TABLE TABLENAME ON MIT PRESERVE ROWS as select * from other_tables ; execute immediate str; end; 特性和性能(与普通表和视图的比较) 临时表只在当前连接内有效 临时表不建立索引 所以如果数据量比较大或进行多次查询时 不推荐使用 数据处理比较复杂的时候时表快 反之视图快点 在仅仅查询数据的时候建议用游标: open cursor for sql clause ; cha138/Article/program/Oracle/201311/18537