Search code examples
mysqlselectstored-procedurescursor

Select statement inside cursor in mysql stored procedure is not taking into keyword


This stored procedure is not reading the keyword "into" in the SELECT statement inside the cursor loop. "SELECT empid into vempid" Any help will be appreciated.

BEGIN
DECLARE processed,vAttendEmpid,vNoOfDays, vempid, vbasic_pay, vallowance, vda, vhra, vmeal_voucher, vcar_allowance, vchild_education ,vID INT DEFAULT 0;
DECLARE curAttendance CURSOR FOR Select empid, count(in_date_time) as d1 from       emp_attendance_processed where DATE_FORMAT( in_date_time, '%m' ) =  process_month and DATE_FORMAT(     in_date_time, '%Y' ) = process_year group by empid order by empid;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET processed = 1 ;

OPEN curAttendance;
REPEAT
FETCH curAttendance INTO vAttendEmpid, vNoOfDays;
    IF NOT processed THEN
    Select vNoOfDays;

   SELECT empid into vempid,  basic_pay into vbasic_pay, allowance into vallowance, da into vda, hra into vhra,
   meal_voucher into vmeal_voucher, car_allowance into vcar_allowance, child_education into vchild_education** 
   from empsalary where empid= vAttendEmpid;

    SET vbasic_pay = vbasic_pay*(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    SET vallowance = vallowance *(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    SET vda = vda *(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    SET vhra = vhra *(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    SET vmeal_voucher = vmeal_voucher *(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    SET vcar_allowance = vcar_allowance *(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    SET vchild_education = vchild_education *(vNoOfDays/DATE_FORMAT(  LAST_DAY(CONCAT(process_year,'-',process_month,'-','01')),'%d'));
    insert into emp_salary_processed (empid, basic_pay, allowance, da, hra, meal_voucher, car_allowance, child_education)
    values(vempid, vbasic_pay, vallowance, vda, vhra, vmeal_voucher, vcar_allowance, vchild_education);

commit;
END IF;
  UNTIL processed END REPEAT;
  CLOSE curAttendance;

commit;
END

Solution

  • Correct syntax for SELECT ... INTO ... is:

    SELECT col1, ..., coln
      INTO var1, ..., varn
    FROM ...
    

    This is as similar as FETCH statement.

    FETCH curAttendance INTO vAttendEmpid, vNoOfDays;
    

    Change your statement:

    SELECT 
           empid           into vempid, 
           basic_pay       into vbasic_pay, 
           allowance       into vallowance, 
           da              into vda, 
           hra             into vhra,  
           meal_voucher    into vmeal_voucher, 
           car_allowance   into vcar_allowance,
           child_education into vchild_education 
    from 
           empsalary 
    where 
           empid= vAttendEmpid;
    

    To:

    SELECT 
           empid, basic_pay, allowance, da, hra, 
           meal_voucher, car_allowance, child_education
      INTO 
           vempid, vbasic_pay, vallowance, vda, vhra, 
           vmeal_voucher, vcar_allowance, vchild_education 
    FROM 
           empsalary 
    WHERE 
           empid = vAttendEmpid;