你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;
刘 巧 玲:::应该是你吧~~~呵呵你应该解决了吧, 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; 。
试试看这样行不行 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;
我的存储过程写完了,不过我是用for循环那种方式的,另外那个有时间再试试大家说的,呵呵,时间紧张。再问,我要在存储过程中 --删除序列 drop sequence bdtreeseq;
--创建序列 CREATE SEQUENCE bdtreeseq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE; 应该把这些语句放在哪里呢?
这些也要动态执行 sqlstr:=‘drop sequence bdtreeseq’;
execute immediate sqlstr;
sqlstr:='CREATE SEQUENCE bdtreeseq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE'; execute immediate sqlstr;
把 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;
re是保留字,(id,name,type,lev,pid,miscode,miscontent,tablename,"re")
把表结构给我,不然我调不起来。
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;
。
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;
--删除序列
drop sequence bdtreeseq;
--创建序列
CREATE SEQUENCE bdtreeseq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE;
应该把这些语句放在哪里呢?
execute immediate sqlstr;
sqlstr:='CREATE SEQUENCE bdtreeseq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE'; execute immediate sqlstr;