oracle版本是8.0.5,想在存储过程中创建表用完之后在删除,代码如下CREATE OR REPLACE PACKAGE PKG_rptAmountOverdueComp
AS
  type rc_result is ref cursor;
  PROCEDURE SP_GetResult(ResultCursor out rc_result);
END PKG_rptAmountOverdueComp;create or replace package body PKG_rptAmountOverdueComp
as
  PROCEDURE SP_GetResult(ResultCursor out rc_result)
  is
    v_num number;
  begin
       select count(*) into v_num from user_tables where table_name='rptAmountOverdueComp';
       
       if v_num then
          drop table rptAmountOverdueComp
       end if;   
       
       CREATE TABLE rptAmountOverdueComp 
       (
       FunctionID              varchar2(20),
       FunctionName            varchar2(100),
       FunctionType            varchar2(50),
       FunctionGroup          varchar2(50),
       FunctionTitle          varchar2(100),
       SQLText              varchar2(500),
       ReportFileName          varchar2(100),
       OrderBy              varchar2(200),
       IsVisible              varchar2(1)
       );       --select * into rptAmountOverdueComp from MainFunctions;
       
       open ResultCursor for 
            select * from rptAmountOverdueComp;
       
  end;  
end PKG_rptAmountOverdueComp;执行后报“无法在调用之前找到程序单元”,

解决方案 »

  1.   

    要用动态语句
    v_sqlstring:='  CREATE TABLE rptAmountOverdueComp 
           (
           FunctionID              varchar2(20),
           FunctionName            varchar2(100),
           FunctionType            varchar2(50),
           FunctionGroup          varchar2(50),
           FunctionTitle          varchar2(100),
           SQLText              varchar2(500),
           ReportFileName          varchar2(100),
           OrderBy              varchar2(200),
           IsVisible              varchar2(1)
           )';
    execute immediate v_sqlstring;
      

  2.   

    还有要加变量说明的
    v_sqlstring varchar2(1024);
      

  3.   

    oracle版本是8.0.5,是不是不支持动态sql,我用动态sql试过也不行
      

  4.   

    oracle8.0.5不支持临时表,这些表只是临时用,不希望长期存在
      

  5.   

    SQL> create or replace procedure p_test IS
      2  ssql VARCHAR2(1000);
      3  begin
      4      ssql :='create table TESTTAB
      5  (
      6    VALUE VARCHAR2(20)
      7  )';
      8  EXECUTE IMMEDIATE ssql;
      9  ssql :='drop table testtab';
     10  EXECUTE IMMEDIATE ssql;
     11  
     12  end  p_test;
     13  /Procedure createdSQL> execute p_test;PL/SQL procedure successfully completed
      

  6.   

    在保证你操作数据库的用户具有create any table的权限前提下,进行我楼上的那种execute   create字符串的方法建立表,并且用execute drop字符串的方法删除刚才建立过的表
      

  7.   

    我试过,好象oracle8.0.5不支持EXECUTE IMMEDIATE