语句内容: V_SQL_02 := 'CREATE  TABLE TMP_JK_' || V_REF_TAB ||CHR(10)||
                ' AS ' || CHR(10)||
                'SELECT *  FROM ' || V_REF_TAB || ' T '||CHR(10)||           
                 'WHERE  t.data_time  >=' || (sysdate -8)  ||CHR(10)||
                ' AND  t.data_time  < '||sysdate  ;
                                
  EXECUTE IMMEDIATE V_SQL_02;以上语句在存储过程中执行会出现错误信息
ORA-00933: SQL 命令未正确结束如果  'WHERE  t.data_time  >=' || (sysdate -8)  ||CHR(10)||
                ' AND  t.data_time  < '||sysdate  ;
则是没有问题请各位帮忙瞅瞅是啥原因 谢谢

解决方案 »

  1.   

    你发from后面有空格吗?还有表别名T前面
      

  2.   

    V_SQL_02 := 'CREATE  TABLE TMP_JK_' || V_REF_TAB ||CHR(10)||
                    ' AS ' || CHR(10)||
                    '(SELECT *  FROM ' || V_REF_TAB || ' T '||CHR(10)||           
                     'WHERE  to_char(t.data_time,''yyyymmdd'')  >=''' || to_char((sysdate -8),'yyyymmdd')||
                    ''' AND  to_char(t.data_time,''yyyymmdd'')  < '''||to_char((sysdate -8),'yyyymmdd')||''')' ;都to_char一下,原来的是t.date和2015年7月1日这个格式的数据比较的
      

  3.   

    将EXECUTE IMMEDIATE V_SQL_02
    改成
    dbms_output.put_line( V_SQL_02);输出看下就一目了然了
      

  4.   

                    ' AND  t.data_time  < '||sysdate  ;这句,动态拼接成 sql 时,出现了问题
      

  5.   

    V_SQL_02 := 'CREATE  TABLE TMP_JK_' || V_REF_TAB ||CHR(10)||
                     ' AS ' || CHR(10)||
                     'SELECT *  FROM ' || V_REF_TAB || ' T '||CHR(10)||
                      'WHERE  t.date_time  >=' || '(select (sysdate -8) from dual) ' ||CHR(10)||
                     ' AND  t.date_time  < '||'(select sysdate from dual) ' ;EXECUTE IMMEDIATE V_SQL_02;
    试一下这个
    你可以用dbms_output.put_line(V_SQL_02 ) 输出下,得到的语句执行下,你可以发现在时间那块会报错
    最后提示下,如果更改之后报出权限不足的错误,建议执行以下语句:
    grant create any table to 用户名;