本帖最后由 mpzfz2001 于 2012-05-22 17:46:46 编辑

解决方案 »

  1.   

    str varchar2(500);
     --变量定义完后 ,后面开始
     begin  
      

  2.   

      加上 begin 就不会报错了!
      

  3.   

    不好意思,我没粘全,本来有begin,没有就不会编译通过了吧。主要是ORA-00933: SQL 命令未正确结束,还是动态SQL的问题啊
      

  4.   

    create or replace procedure aaa Authid Current_User
    as
    v_d1 date;
    v_d2 date;
    str varchar2(500);beginv_d1:=trunc(sysdate)-30;
    v_d2:=trunc(sysdate);str:= 'CREATE TABLE table1 as Select USER_NO,Max(join_date) join_date from xxx@db_link aa where aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO ';
    execute immediate str;end aaa;
    就是这个,报错ORA-00933: SQL 命令未正确结束
    ORA-06512: 在 "aaa", line 43
    ORA-06512: 在 line 1
    到底什么原因呢,是这个Select USER_NO,Max(join_date) join_date from xxx@db_link的问题吗,
    是动态SQL中不能使用@db_link还是什么问题?高手解答下
      

  5.   

    如果编译通过了,在执行的时候报错的话,你可以先把str输出出来,看看他到底是什么语句,然后再在sqlplus里面执行看看能否执行通过
      

  6.   

    问题已经解决了,还是引用变量问题
    aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO '
    不能用单引号,aa.JOIN_DATE>='''||v_d1||''' And aa.JOIN_DATE<'''||v_d2||''' group by USER_NO '  改成这样就好了。