学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
轻松建立自己的群组,招兵买马   
发新话题
打印

游标执行了第一条记录为什么就停了呢???

游标执行了第一条记录为什么就停了呢???

DECLARE cs_emp CURSOR FOR
SELECT emp_code FROM t_emp where dept_code like :ls_find_dept and leave_flag="N" order by emp_code;
open cs_emp;
if sqlca.sqlcode < 0 then
Messagebox("Êý¾Ý¿â´í","ÓαêÎÞ·¨Ö´ÐÐ!" + sqlca.sqlerrtext)
return sqlca.sqlcode
end if

fetch cs_emp into :ls_emp_code;
do while sqlca.sqlcode = 0 //°´²¿ÃÅÄÚµÄÔ±¹¤
Delete from t_leave where emp_code = :ls_emp_code and datediff(day,startdate,:ld_date_start) <=0 and datediff(day,startdate,:ld_date_end) >=0 ;

For li_2 = 0 To DaysAfter(ld_date_start,ld_date_end)
is_cur_date = RelativeDate(ld_date_start,li_2)

if is_cur_date = ld_date_start then // µÚÒ»Ìì
wf_get_leavehour()

insert into t_leave(emp_code,startdate,enddate,startime,endtime,leave_type,reason,leave_day,leave_hour)
values(:ls_emp_code,:is_cur_date,:is_cur_date,:ls_startime,'1730',:ls_leavetype,:ls_reason,:ide_days2,:ide_hours2);
commit;
elseif is_cur_date = ld_date_end then //×îºóÒ»Ìì
wf_get_leaveend()

insert into t_leave(emp_code,startdate,enddate,startime,endtime,leave_type,reason,leave_day,leave_hour)
values(:ls_emp_code,:is_cur_date,:is_cur_date,'0800',:ls_endtime,:ls_leavetype,:ls_reason,:ide_days1,:ide_hours1);
commit;
else //ÖмäµÄ

insert into t_leave(emp_code,startdate,enddate,startime,endtime,leave_type,reason,leave_day,leave_hour)
values(:ls_emp_code,:is_cur_date,:is_cur_date,'0800','1730',:ls_leavetype,:ls_reason,'1','8');
commit;
end if
next
fetch cs_emp into :ls_emp_code;

loop
close cs_emp;

TOP

就是说,如果一个游标有几条记录,当有标执行后,运行第一条记录到下面的fetch语句后,就跳出来了,不会继续将剩下的内容执行完,为什么呢????

TOP

我也遇到过类似问题,我试过将提交语句移出循环就没事了,可能是提交时出的错,具体原因就不太清楚了。

TOP

fetch cs_emp into :ls_emp_code;
应该放在循环语句里

TOP

检查一下在insert 之前每个变量的值或数据类型和你的table是否一致,在commit之前show 一下你的sqlca.sqlcode 的值。很容易就可以查出问题了,这种情况以前也碰到。

TOP

TOP

发新话题