不好意思,头昏了,我用的都是显示游标,只是两种不同的使用方式而已,要open游标那种使用不正常,一运行就停不下来,用for那个就正常,为何?另外,还是有那个无效列名的问题,为何呢?

解决方案 »

  1.   

    我又发现我的说的无效列名的问题了,因为miscontent字段是字符型的,我在sql语句里面没有给字段两边加上单引号。
      

  2.   

    你loop的地方错了,肯定是死循环。
    把 if c_bdz%isopen=false then  --如果游标没有打开
          open c_bdz('1','1');
       end if;
       fetch c_bdz into v_id,v_re;
       while c_bdz%found
       loop
    改为
     if c_bdz%isopen=false then  --如果游标没有打开
          open c_bdz('1','1');
       end if;
    loop
       fetch c_bdz into v_id,v_re;
       while c_bdz%found;
      

  3.   

    (id,name,type,lev,pid,miscode,miscontent,tablename,re)
    re是保留字,(id,name,type,lev,pid,miscode,miscontent,tablename,"re")
    把表结构给我,不然我调不起来。
      

  4.   

    刘 巧 玲:::应该是你吧~~~呵呵你应该解决了吧, nowait(独行天涯路) 兄弟已经看出了原因不过你还可以使用if c_bdz%isopen=false then  --如果游标没有打开
          open c_bdz('1','1');
    end if;
    LOOP
      BEGIN
         fetch c_bdz into v_id,v_re;
         EXIT WHEN c_bdz%NOTFOUND;
         sqlstr := 。  
         BEGIN
         execute immediate sqlstr; 
         EXCEPTION
    WHEN OTHERS THEN
            --INSERT   写一个出错表,没有写进的记录
         END;
     END;
    END LOOP;
      

  5.   

    试试看这样行不行  
    open c_bdz;
      fetch c_bdz into v_id,v_re;
      loop
         exit when not c_bdz%found;
      ......
         fetch c_bdz into v_id,v_re;
      end loop;   
    close c_bdz;
      

  6.   

    我的存储过程写完了,不过我是用for循环那种方式的,另外那个有时间再试试大家说的,呵呵,时间紧张。再问,我要在存储过程中
    --删除序列
       drop sequence bdtreeseq;
       
       --创建序列
       CREATE SEQUENCE bdtreeseq
       INCREMENT BY 1  
       START WITH 1   
       NOMAXVALUE     
       NOCYCLE;
    应该把这些语句放在哪里呢?
      

  7.   

    这些也要动态执行  sqlstr:=‘drop sequence bdtreeseq’;
      
      execute immediate sqlstr; 
      
      sqlstr:='CREATE SEQUENCE bdtreeseq
       INCREMENT BY 1  
       START WITH 1   
       NOMAXVALUE     
       NOCYCLE';  execute immediate sqlstr;