create or replace procedure test
as
begin
execute immediate 'create table table1 (a varchar2(10))';
execute immediate 'create table table2 (a varchar2(10))';
end test;

解决方案 »

  1.   

    NinGoo(宁哥) 好早啊楼上对的,DDL语句不能直接放在存储过程(包括匿名存储过程)中执行,要用动态SQL语句
    也就是execute immediate 'ddl语句';begin
    execute immediate 'create table table1 (a varchar2(10))';
    execute immediate 'create table table2 (a varchar2(10))';
    end;
      

  2.   

    不是早,是根本没睡:(一套sql server cluster做升级,操作系统升级后出了问题,看着供应商的支持人员鼓捣了一晚上还没搞定,郁闷看来要连续奋战36小时了,做DBA真是命苦啊~~~~~~~
      

  3.   

    有MSN吗,在楼主这聊天不太礼貌吧,[email protected]楼主sorry啦
      

  4.   

    一定要用execute immediate 
    才能执行create,drop,trucate等语句.
      

  5.   

    你在创建第一个的时候没有完全的事务提交,这个时候在pl/sql中就是本能的认为你的表没有创建完成,提示的错误是不是 sql语句没有完全结束啊.应该在你创建的时候每一次的都将事务提交了