本帖最后由 njpolice001 于 2010-11-01 20:58:05 编辑

解决方案 »

  1.   

    exec test--你的过程名写错了
      

  2.   

    PROCEDURE test ???
    sql> exec test;
      

  3.   

    暴汗啊,太大意了,找了半天错误,不过在toad里运行报错,说无效的SQL语句,不知道是怎么回事啊,SQLPLUS里边运行的很好
      

  4.   

    BEGIN 
    test; --注意你的过错名!
    END
      

  5.   

    你用 begin
    test;
    end --试试这样
      

  6.   


    整个过程在数据抓取的时候没有问题,创建索引报错,这里索引应该怎么弄啊?
    还有在TOAD里运行过程还是报错
      

  7.   

    exec 好像是sqlplus命令 
      

  8.   

    创建索引报错,在TOAD里运行过程还是报错。
    错误信息是什么?
      

  9.   

    toad里运行过程,EXEC TEST 
    结果:无效的SQL语句SQLPLUS里运行
    前边抓取没有问题,后面建立索引错误为
    ora-00905缺失关键字
    ora-06512在“ddcxd.test”,line 10
    ora-06512在 line 1然后发现抓取的表正常,先前建立的索引被删除后再次创建失败
      

  10.   

    1、无效的sql语句 exec是sqlplus里的命令 在toad没有
    2、你创建索引的拼接语句有问题
    14 strSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (JJBH)'
     15 ||' LOGGING '
     16 ||' TABLESPACE DDCXD'
     17 ||' PCTFREE 10'
     18 ||' INITRANS 2'
     19 ||' MAXTRANS 255'
     20 ||' STORAGE (' --上面几行少了空格,建议以后可以将拼接的语句打印出来 一看就知道了
     21 ||' INITIAL 64K'
     22 ||' MINEXTENTS 1'
     23 ||' MAXEXTENTS UNLIMITED'
     24 ||' PCTINCREASE 0'
     25 ||' BUFFER_POOL DEFAULT'
     26 ||' )'
     27 ||'NOPARALLEL';
      

  11.   

    修改过了,索引都用默认的,代码如下
    SQL> CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (BH)
      2  /索引已创建。SQL> CREATE OR REPLACE PROCEDURE DDCXD.test AUTHID CURRENT_USER IS
      2  tmpVar NUMBER;
      3  strSQL varchar2(2000);
      4  BEGIN
      5     strSQL := 'drop table local_xx';
      6     execute immediate strSQL;
      7     strSQL := 'create table local_xx as select * from xt_dba.xx@dblink_xt where rqsj between '|| chr(39) || 20091221 || chr(39) || ' and ' || chr(39) || 20101101235959 || chr(39);
      8     execute immediate strSQL;
      9     strSQL := 'DROP INDEX DDCXD.IDX_XX_BH';
     10     execute immediate strSQL;
     11     strSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (BH)';
     12     execute immediate strSQL;
     13  END test;
     14  /过程已创建。SQL> EXEC TEST
    BEGIN TEST; END;*
    第 1 行出现错误:
    ORA-01418: 指定的索引不存在
    ORA-06512: 在 "DDCXD.TEST", line 10
    ORA-06512: 在 line 1
      

  12.   

    for c in (select null from user_indexes where index_name='IDX_XX_BH') loop
     execute immediate 'drop index DDCXD.IDX_XX_BH';
    end loopstrSQL :='CREATE INDEX DDCXD.IDX_XX_BH ON DDCXD.LOCAL_XX (JJBH)'||chr(10)
     ||'LOGGING'||chr(10)
     ||'TABLESPACE DDCXD'||chr(10)
     ||'PCTFREE 10'||chr(10)
     ||'INITRANS 2'||chr(10)
     ||'MAXTRANS 255'||chr(10)
     ||'STORAGE ('||chr(10)
     ||' INITIAL 64K'||chr(10)
     ||' MINEXTENTS 1'||chr(10)
     ||' MAXEXTENTS UNLIMITED'||chr(10)
     ||' PCTINCREASE 0'||chr(10)
     ||' BUFFER_POOL DEFAULT'||chr(10)
     ||' )'||chr(10)
     ||'NOPARALLEL';
    execute immediate strSQL;
      

  13.   


    SQL> exec text
    BEGIN text; END;你的过程名叫 test
    exec test