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
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;