在存储过程里怎么删除表,我使用:
drop  table   MV_AREA_TID_LOTTERY_DAY_TMP; 
这语句,但报
Compilation errors for PACKAGE BODY OMAS.PKG_PROCIMPORTDATAError: PLS-00103: Encountered the symbol "DROP" when expecting one of the following:
       
          := . ( @ % ; immediate
Line: 87
Text: execute drop  table   MV_AREA_TID_LOTTERY_DAY_TMP;怎么样在存储过程里删除一个表,除了使用execute immediate  'drop  table   MV_AREA_TID_LOTTERY_day_TMP';   没其它办法了吗?

解决方案 »

  1.   

    使用execute immediate  'drop  table  MV_AREA_TID_LOTTERY_day_TMP'有什么问题吗?
      

  2.   

    Oracle 8i 及以上版本中,还能用 DBMS_UTILITY.EXEC_DDL_STATEMENT(ddl_sql_str) 执行 DDL 语句。
    但是无论哪种情况,你的PACKAGE BODY编译未通过,根本无法执行。首先需要通过编译,然后再执行。。
      

  3.   

    plsql的程序块,比如procedure和trigger是不能加入ddl语句的,如果有ddl语句,是有编译错误。 但是oracle提供了execute immediate这样的动态sql的功能。
      

  4.   

    用了execute immediate语句,怎么保证执行的顺序呢
      

  5.   


    仔细看看,就不难发现你错在哪里了。execute immediate 'drop  table  MV_AREA_TID_LOTTERY_DAY_TMP';
      

  6.   

    这个我知道,已改过来了,我现在不想用execute immediate
      

  7.   

    那没办法了,DBMS_UTILITY.EXEC_DDL_STATEMENT(ddl_sql_str)其实也是动态sql,数了下字符数,比execute immediate还多,而且还有这么多_在前面。
      

  8.   

    execute immediate <sql>是不是每执行一次就在服务器端产生一个线程,我现在要同时执行多个sql,但每个sql要按顺序执行,执行完sql1后再能执行sql2。
      

  9.   

    DDL在存储过程中要使用动态的SQL,execute immediate SQL
      

  10.   

    存储过程里面的ddl语句只能用execute immediate sql 这个动态sql语句啦!
      

  11.   

    DDL在存储过程中要使用动态的SQL,execute immediate SQL
      

  12.   

    给个例子:SQL> create or replace procedure test1
      2  is
      3  begin
      4  dbms_utility.exec_ddl_statement('create table sa as selec
      5  end;
      6  /过程已创建。SQL> create or replace procedure test2
      2  is
      3  begin
      4  dbms_utility.exec_ddl_statement('truncate table sa');
      5  end;
      6  /过程已创建。SQL> create or replace procedure test
      2  is
      3  begin
      4  dbms_utility.exec_ddl_statement('drop table sa');
      5  end;
      6  /过程已创建。SQL> call test1();调用完成。SQL> call test2();调用完成。
    SQL> call test();调用完成。
      

  13.   

    SQL> create or replace procedure test1
      2  is
      3  begin
      4  dbms_utility.exec_ddl_statement('create table sa as select * from emp');
      5  end;
      6  /过程已创建。SQL> create or replace procedure test2
      2  is
      3  begin
      4  dbms_utility.exec_ddl_statement('truncate table sa');
      5  end;
      6  /过程已创建。SQL> create or replace procedure test
      2  is
      3  begin
      4  dbms_utility.exec_ddl_statement('drop table sa');
      5  end;
      6  /过程已创建。SQL> call test1();调用完成。SQL> call test2();调用完成。SQL> call test();调用完成。SQL>
      

  14.   

    execute immediate  'drop  table  MV_AREA_TID_LOTTERY_day_TMP'