解决方案 »

  1.   

    报什么错?1、注意到你的某些语句后面的分号没写,不知道是不是这的问题
    2、if exists的用法貌似没有吧
      

  2.   

    这个是oracle用法,我就是按照它的那个写的,可是就是建不上去,还有我也试过,将if exists的语句删掉,可是create语句就会报错,
      

  3.   

    declare
      i number;
    begin
      select count(1) into i from user_indexes where name='IX_writeenExam';
      if i>0 then
         drop index IX_writeenExam;
      end if;
      create NONCLUSTERED  index IX_writeenExam 
      on tb1 (IX_writeenExam)
      with fillfactor=30;
    end;
      

  4.   

    Oracle中没有 if exists,你这应该是其他数据的写法,像sql sever就可以这样写
      

  5.   

    declare i number;
        begin
         select count(1) into i from sysindexes where name='IX_writeenExam';
              if i>0 then
                 drop index IX_writeenExam;
              end if;
      create NONCLUSTERED  index IX_writeenExam 
      on tb1 (IX_writeenExam)
      with fillfactor=30;
    end;
    我写上去了,可是还是错。  drop下面冒红线了。
      

  6.   

    改成这样
     drop index  IX_writeenExam on tb1
      

  7.   

    记混了,上面写的是sqlsever的写法
    oracle应该就是 drop index 索引名
    你那有红线,显示是什么错?
      

  8.   

    ORA-06550: line 5, column 13:
    PLS-00103: Encountered the symbol "DROP" 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> <<上面的就是显示的错误信息,可我看不懂。
      

  9.   

    declare
      i number;
    begin
      select count(1) into i from user_indexes where name='IX_writeenExam';
      if i>0 then
         execute immediate 'drop index IX_writeenExam';
      end if;
      execute immediate 'create NONCLUSTERED  index IX_writeenExam 
      on tb1 (IX_writeenExam)
      with fillfactor=30';
    end;
      

  10.   

    用动态SQL:declare
      i   integer;
      str varchar2(1000);
    begin
      select count(name) into i from sys.indexes where name = 'IX_writeenExam';
      if i > 0 then
        str := 'drop index IX_writeenExam';
        execute immediate str;
        str := 'create NONCLUSTERED index IX_writeenExam on tb1(IX_writeenExam)
          with fillfactor = 30';
        execute immediate str;
      end if;end;
      

  11.   

    这次是在 IF 处出红线  ,End处出红线。
      

  12.   

      
    declare i number;
        begin
         select count(1) into i from sysindexes where name='IX_writeenExam';
              if i>0 then
                 drop index IX_writeenExam;
              end if;
      create NONCLUSTERED  index IX_writeenExam 
      on tb1 (IX_writeenExam)
      with fillfactor=30;
    end;
        
    这个一直就是drop处出红线。    
      

  13.   

    不能直接drop和create,用动态SQL,见11#
      

  14.   

    我试了一下用动态SQL,它是不报红线,但是执行不成功。
      

  15.   

    存储过程中如果涉及ddl语句,要放在动态语句中处理
    另外,FILLFACTOR参数去掉,Oracle中没有这个用法
      

  16.   

    是直接删掉fillfactor=30?就可以?