在存储过程中创建临时表,表原先不存在,编译时倒数第二句会出错(找不到这张表),事先有这张表的话就不会了,怎么解决这个问题?
create or replace procedure DataSet_SingleRow
(RESULT_SET out SYS_REFCURSOR)
is
i number := 0;
begin   
select count(1) into i from user_objects where object_name='TMP_PROC';
if (i > 0) then   
execute immediate 'drop table tmp_proc';
else
execute immediate 'create global temporary table tmp_proc (dm number,mc number)';
execute immediate 'insert into tmp_proc values(1,1)';
end if;
open RESULT_SET for select * from tmp_proc;
end DataSet_SingleRow;

解决方案 »

  1.   

    "找不到這張表,說明這張表一定不存在,說明建表的語句沒有運行"这个我知道,但这是在编译的时候出错;运行时是不会有这种问题的,临时表会被先建立起来,有办法避免吗?sql2005和db2都不存在这种问题:2005在编译时不会去检查表存不存在;db2可以通过with replace属性覆盖这张表。这个问题应该可以解决吧?
      

  2.   

    Execute Immediate 'create global temporary table TEMP123
    (
    BANKID   VARCHAR(20),
    ISCITY   VARCHAR(20)
    )On Commit PRESERVE Rows';
      

  3.   

    加上On Commit PRESERVE Rows'
    SQL> show errors;
    PROCEDURE DATASET_SINGLEROW 出现错误:LINE/COL ERROR
    -------- -----------------------------------
    18/22    PL/SQL: SQL Statement ignored
    18/36    PL/SQL: ORA-00942: 表或视图不存在
    仍然不行!!!
      

  4.   

    已经解决:
    open RESULT_SET for 'select * from tmp_proc';
    加上单引号编译就能成功通过.