包没有问题 
CREATE OR REPLACE  PACKAGE "WYUSER"."F_MODEL" as 
type m_cursor is ref cursor; 
function MModelbrow( 
    id1 in number 
  ) return  m_cursor; 
end; 
包体提示ora-00942 表或视图不存在 
CREATE OR REPLACE  PACKAGE BODY "WYUSER"."F_MODEL" as 
function MModelbrow(id1 in number) 
  return m_cursor IS 
      ACursor m_cursor; 
      l1 number; 
      strCreateTable  varchar2(600);    
    BEGIN 
    l1:=0; 
    strCreateTable:='CREATE GLOBAL TEMPORARY TABLE 
    re (ID2 number,level2 number) ON COMMIT PRESERVE ROWS';  
    Execute immediate strCreateTable; 
    INSERT INTO  RE values(id1,l1);    
    COMMIT; 
    open ACursor for select * from re; 
    return ACursor; 
    end MModelbrow; 
end;
这两句报ora-00942 表或视图不存在
 INSERT INTO  RE values(id1,l1);    
open ACursor for select * from re; 
看了别人的函数调用数据集。人家是可以的呀。难道是权限问题。怎么解决呢?大虾们

解决方案 »

  1.   

    这是因为你的re是用动态SQL创建的,而出错的这两句用的不是动态SQL,oracle解析的时候找不到这个表,当然会出错,你把那两句也改为动态sql就好了,比如:
    execeute immediate 'INSERT INTO  RE values(id1,l1)';
      

  2.   

    Execute immediate 'INSERT INTO  RE values(id1,l1)';是可以。 
    但是 
    open ACursor for select * from re; 
    不行。用open ACursor for Execute immediate 'select * from re';肯定不行
      

  3.   

    CREATE GLOBAL TEMPORARY TABLE 
    re (ID2 number,level2 number) ON COMMIT PRESERVE ROWS函数里不能这样执行。
      

  4.   

    open ACursor for 'select * from re'; 
      

  5.   


    具体用时需要再改一下, 比如:
    execeute immediate 'INSERT INTO  RE values(:id1,:id2)' using id1,l1; 
      

  6.   

    execeute immediate 'INSERT INTO  RE values(:id1,:id2)' using id1,l1;
    这句报错: PLS-00103: 出现符号 "EXECUTE"在需要下列之一时