create or replace procedure reset_seq
is
  l_val number;
  num number;
  Cursor cur_seq is select squencename from codeinfo order by codeinfo_id;
  squ_name varchar2(50);
begin
  for squ_name in cur_seq loop

      select count(1) INTO num from All_Sequences where Sequences_name= squ_name.squencename ;
      if num > 0 then
        execute immediate
        'select ' || squ_name.squencename || '.nextval from dual' INTO l_val;

        execute immediate
        'alter sequence ' || squ_name.squencename || ' increment by -' || l_val ||   ' minvalue 0';
        execute immediate
        'select ' || squ_name.squencename || '.nextval from dual' INTO l_val;
        execute immediate
        'alter sequence ' || squ_name.squencename || ' increment by 1 minvalue 0';
      end if;
  end loop;
end ;
只要循环里加了红色的那个sql语句就出错,求各位大牛给看下。

解决方案 »

  1.   

    select count(1) INTO num from All_Sequences where Sequences_name= squ_name.squencename ;放到for 。。IN 前面
      

  2.   


    我是要把codeinfo 表里存的squencename 取出来 判断他们是否是序列。放到for前面好像就不对了
      

  3.   

    只是有个PL/SQL: Statement ignored
      

  4.   

    from All_Sequences where Sequences_name如果这个是系统视图 ,那就是字段写错了 Sequence_name 不是  Sequences_name
      

  5.   


    create or replace procedure reset_seq 
    is 
      l_val number; 
      num number;
      Cursor cur_seq is select squencename from codeinfo order by codeinfo_id; 
      --squ_name varchar2(50); --do not have to define
    begin 
      for squ_name in cur_seq loop --will define squ_name as the type of squencename auto.  select count(1) INTO num from All_Sequences where Sequences_name= squ_name.squencename ; 
      if num > 0 then
      execute immediate 
      'select ' || squ_name.squencename || '.nextval from dual' INTO l_val;   execute immediate 
      'alter sequence ' || squ_name.squencename || ' increment by -' || l_val || ' minvalue 0'; 
      execute immediate 
      'select ' || squ_name.squencename || '.nextval from dual' INTO l_val; 
      execute immediate 
      'alter sequence ' || squ_name.squencename || ' increment by 1 minvalue 0'; 
      end if;
      end loop; 
    end ;