【问题标题】:Select statement inside cursor in mysql stored procedure is not taking into keywordmysql存储过程中游标内的select语句没有考虑关键字
【发布时间】:2014-03-24 17:20:14
【问题描述】:

此存储过程未在游标循环内的 SELECT 语句中读取关键字“into”。 “选择 empid 进入 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

【问题讨论】:

    标签: mysql select stored-procedures cursor


    【解决方案1】:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多