繁体   English   中英

mysql存储过程中光标内的select语句未考虑关键字

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

此存储过程未在游标循环内的SELECT语句中读取关键字“ into”。 “将SELECT 嵌入到 vempid中”任何帮助将不胜感激。

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

SELECT ... INTO ... 正确语法是:

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

这类似于FETCH语句。

FETCH curAttendance INTO vAttendEmpid, 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;

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM