database - Nested Cursor call is calling inner cursor only once in MYSQL -
there 2 procedures. when tested separately execute fine. when first sp calls 2nd sp, not called after first call. please resolve issue. first cursor:
begin declare vattendempid,vnoofdays, vempid int default 0; declare processed boolean default false; declare curemp cursor select distinct empid d1 rawattendance date_format( indatetime,'%m') = process_month , date_format( indatetime,'%y') = process_year order empid; declare continue handler not found set processed = true ; open curemp; loopemp: loop fetch curemp vempid; if processed close curemp; leave loopemp; end if; --select vempid; call sp_attendance(vempid,process_month,process_year); end loop loopemp; end
2nd cursor.. nested cursor
begin declare vindatetime, voutdatetime,vtempindatetime, vtempoutdatetime datetime ; declare vattendempid ,vdiffhr int default 0; declare eprocessed boolean default false; declare curattendance cursor select empid, indatetime ,outdatetime rawattendance empid=vempid , date_format( indatetime, '%m' ) = process_month , date_format( indatetime, '%y' ) = process_year order indatetime; open curattendance; att_loop:loop fetch curattendance vattendempid, vindatetime,voutdatetime; select concat ('in time 0 ==',vindatetime, ' out ==', voutdatetime, ' empid=',vattendempid); select 'looping'; if eprocessed select 'loop end'; select concat ('in time 4 ==',vtempindatetime, ' out ==', vtempoutdatetime, ' empid=',vattendempid); set vdiffhr =timestampdiff(hour,vtempindatetime,vtempoutdatetime); insert emp_attendance_processed(empid,in_date_time, out_date_time, workedhr) values(vattendempid,vtempindatetime,vtempoutdatetime, vdiffhr); set vtempoutdatetime=voutdatetime; close curattendance; end if; end loop att_loop; end
try reset continue handler variable processed
after inner procedure called.
set processed = false;
the problem handler not found
not executed if cursor in first procedure returns no rows, if nested select
returns no rows. , second procedure contains select
statements, believe 1 of them returning empty set @ least 1 time. if that's not intended, may have faulty parameters assigned.
open curemp; loopemp: loop fetch curemp vempid; if processed close curemp; leave loopemp; end if; --select vempid; call sp_attendance(vempid,process_month,process_year); set processed = false; end loop loopemp;
Comments
Post a Comment