小白勇闯深度学习 2021-05-27 13:38 采纳率: 100%
浏览 61
已采纳

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条回答 默认 最新

  • 关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘