我本人建议你最好是在其他地方建立好了,然后再过程中使用,这样的效率会提高。动态创建
  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;

解决方案 »

  1.   

    同意楼上的楼上,如果临时表是固定的,最好先建好,动态sql执行起来效率比较低
      

  2.   

    用view吧
    create or replace view as select...
      

  3.   

    使用view的效率有可能也是一个瓶颈,要看几张基表的数据量是不是很大,如果不是很大,可以使用view,如果数据量很大,表的数量又要超过3个,建议不要使用view。
      

  4.   

    同意一楼的不过execute immediate好象在ORACLE9i以后的版本才有