qq_58687413
2021-05-27 13:38
采纳率: 100%
浏览 29

mysql的流程控制语句——游标未读取到数据

题目如下 建立存储过程jsgz2,输入年份和月份,计算每位职工当月的实际工资。实际工资为基本工资加上津贴,减去扣款。 其中,津贴计算:销售部的员工的津贴为其当月的应付款金额的1%,其他部门每月的津贴存放在 bmjt数据表中。 扣款为8%社保,2%医疗保险,0.5%失业保险,公积金5%。 应税所得为应发工资减去这些扣款。 按规则计算个人所得税 最后,将每位职工的各项明细插入到gz数据表中。 个税计算采取累进税率,例如某人月收入20000,专项扣除2000,应纳税所得20000-2000- 5000=13000。13000中3000部分税率0.03,3000至12000部分税率0.1,大于12000的1000税率0.2,所以税收3000*0.03+9000*0.1+1000*0.2=1190。 我的代码为 DELIMITER // CREATE PROCEDURE jsgz2(in y int,in m int) BEGIN declare flag int default true; declare zgbh int; declare zgxm varchar(10); declare zgbm varchar(10); declare zggz int; declare xsehj int; declare zgjt int; declare zgsb int; Declare zgyb int; declare zgsybx int; declare zgyssd int; declare zggrsds int; declare zggjj int; declare zdkk int; declare zg cursor for select gym,gyxm,bm,gz from gzry; declare continue handler for not found set flag=false; OPEN zg; REPEAT FETCH zg INTO zgbh,zgxm,zgbm,zggz; set zgsb=0.08*zggz; set zgyb=0.02*zggz; set zgsybx=0.005*zggz; set zggjj=0.05*zggz; If zggz-zdkk<=3000 then Set zggrsds=0.03*(zggz-zdkk); elseif zggz-zdkk>3000 and zggz-zdkk<=12000 then set zggrsds=3000*0.03+(zggz-zdkk-3000)*0.1; elseif zggz-zdkk>12000 and zggz-zdkk<=25000 then Set zggrsds=3000*0.03 + 9000*0.1 +(zggz-zdkk-12000)*0.2; elseif zggz-zdkk>25000 and zggz-zdkk<=35000 then Set zggrsds=3000*0.03 + 9000*0.1 +13000*0.2+(zggz-zdkk-25000)*0.25; elseif zggz-zdkk>35000 and zggz-zdkk<=55000 then Set zggrsds=3000*0.03 + 9000*0.1 +13000*0.2+10000*0.25+(zggz-zdkk-35000)*0.3; elseif zggz-zdkk>55000 and zggz-zdkk<=80000 then Set zggrsds=3000*0.03 + 9000*0.1 +13000*0.2+10000*0.25+20000*0.3+(zggz-zdkk-55000)*0.35; elseif zggz-zdkk>80000 then Set zggrsds=3000*0.03 + 9000*0.1 +13000*0.2+10000*0.25+20000*0.3+25000*0.35+(zggz-zdkk-80000)*0.45; end if; If zgbm="销售部" then select sum(yfk) from xsd where year(xsrq)=y and month(xsrq)=m and gyh=zgbh into xsehj; set zgjt=xsehj*0.01; else select jt from bmjt where nf=y and yf=m and bm=zgbm into zgjt; end if; Insert into gz(gyh,gyxm,bm,gz,jt,yfgz,nf,yf,sb,yb,sybx,gjj,yssd,grsds,sfgz) values(zgbh,zgxm,zgbm,zggz,zgjt,zggz+zgjt-zdkk,y,m,zgsb,zgyb,zgsybx,zggjj,zggz-zdkk,zggrsds,zggz+zgjt); UNTIL flag=false END REPEAT; CLOSE zg; END // DELIMITER ; 已经建立的gz表中并没有数据 也就是游标并没有读取到数据 不知道思路是否正确,或者问题出在哪里

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 已采纳

    把存储过程代码格式化一下,通过代码段插入

    已采纳该答案
    打赏 评论
  • 有问必答小助手 2021-05-27 18:23

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    打赏 评论

相关推荐 更多相似问题