declare begincreate table MTable
(
 temp1 varchar(20),
 temp2 number(20)
)
end;
代码如上,执行的时候就出错:Error: PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
       
          begin case declare exit for goto if loop mod null pragma
          raise return select update while with <an identifier>
          <a double-quoted delimited-identifier> <a bind variable> <<
          close current delete fetch lock insert open rollback
          savepoint set sql execute commit forall merge
          <a single-quoted SQL string> pipe
          <an alternatively-quoted SQL string>
Line: 6
Text: create table MTable

解决方案 »

  1.   

    或者说,在存储过程里面如果有建表的语句,也会出错. 为什么啊?oracle就没有临时表的概念么?
      

  2.   

    begin
    execute immediate '
    create table MTable
    (
     temp1 varchar(20),
     temp2 number(20)
    );';
    end;
      

  3.   

    储存过程中不能直接执行DML语句。但可以使用动态执行SQL的方法执行DML。
    楼上的方法就是那样的。 用 excute immediate 'SQL 执行语句';
      

  4.   

    楼上的说错了,是应该用动态SQL来执行DDL语句。
    DDL是定义,DML是操作。
    楼上的楼上,应该不需要2个;吧?
    begin
    execute immediate '
    create table MTable
    (
     temp1 varchar(20),
     temp2 number(20)
    )';
    end;
      

  5.   

    是不能执行DDL,不是DML....不要慌我哦~ 如果不能执行DML, PLSQL有啥用啊
      

  6.   

    可以执行DML,但可以不用EXECUTE IMMEDIATE 来执行,也可以用。但是DDL在PLSQL中只能用EXECUTE IMMEDIATE 来执行!