DECLARE
    v_begin_time DATE;
    v_end_time DATE;
BEGIN
    v_begin_time := sysdate;
    CREATE TABLE tbl_tmp TABLESPACE temp
    AS
    SELECT * FROM tbl_user
    WHERE tbl_user.uid > 2000;
    v_end_time := sysdate;
    SELECT ROUND(TO_NUMBER(v_end_time - v_begin_time) * 24 * 60, 2) FROM DUAL;
END;为什么会报错? 有语法错误么?ORA-06550: line 6, column 5:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:   begin case declare end exception 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
   pipe

解决方案 »

  1.   

    ddl语句在过程中要使用execute immediate的形式执行。
    select 语句在过程中必须匹配into
      

  2.   

    楼主需要了解一下动态SQL使用
      

  3.   

    SQL> DECLARE
      2      v_begin_time DATE;
      3      v_end_time DATE;
      4  BEGIN
      5      v_end_time := sysdate;
      6      SELECT ROUND(TO_NUMBER(v_end_time - v_begin_time) * 24 * 60, 2) FROM DUAL;
      7  END;
      8  /
     
    DECLARE
        v_begin_time DATE;
        v_end_time DATE;
    BEGIN
        v_end_time := sysdate;
        SELECT ROUND(TO_NUMBER(v_end_time - v_begin_time) * 24 * 60, 2) FROM DUAL;
    END;
     
    ORA-06550: 第 7 行, 第 5 列: 
    PLS-00428: 在此 SELECT 语句中缺少 INTO 子句
     
    SQL>