题目如下 建立存储过程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表中并没有数据 也就是游标并没有读取到数据 不知道思路是否正确,或者问题出在哪里
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
已采纳
mysql的流程控制语句——游标未读取到数据
收起
- 写回答
- 好问题 0 提建议
- 关注问题
- 微信扫一扫点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
2条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
CSDN专家-赖老师(软件之家) 2021-05-27 13:41关注把存储过程代码格式化一下,通过代码段插入
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫点击复制链接分享评论按下Enter换行,Ctrl+Enter发表内容
报告相同问题?
提交
- 2021-04-09 08:41回答 3 已采纳 已经用脚本写出来了,其实不用游标也可以,写的脚本如下 UPDATE elevator_enterprise_sy_analyse t1 JOIN (SELECT t1.id,t2.ent_exte
- 2020-05-28 09:14回答 1 已采纳 https://blog.csdn.net/Rideal/article/details/78593055
- 2023-04-14 09:16回答 2 已采纳 引用new bing部分回答作答:如果您想在MySQL存储过程中为多个游标添加关联条件,则可以使用JOIN语句将游标的结果集连接在一起。以下是一些示例代码,演示如何将多个游标的结果连接在一起: DEC
- 2024-04-24 16:25张张一直在路上的博客 本节学习了游标的使用方法,包括在存储过程中使用游标的4个步骤,分别是定义游标、打开游标、读取游标数据和关闭游标。除此之外,还介绍了经常与游标结合使用的流程控制语句,包括循环语句LOOP、WHILE和REPEAT;条件...
- 2022-12-22 16:08回答 1 已采纳 while 条件中的done未定义。你需要在存储过程开头定义declare done。
- 2022-10-16 18:38回答 1 已采纳 sql语句就可以搞定啊,如果用游标得写存储过程,大致就是循环查询数据,根据条件修改数据 update tblProducts a set price =price *(1+(case when
- 2022-10-06 16:11回答 1 已采纳 游标可以理解为一个数据结果集,比如说按照查询条件组成一个游标数据,然后循环这些数据申明游标 :DECLARE C_RESULT CURSOR FOR select id ,name from test
- 2024-04-21 20:17人来茶热的博客 declare 游标名 cursor for 查询语句;
- MySQL 存储过程游标获取数据后报错 MySQL error #1111 - Invalid use of group functionMySQL 错误 #1111 - 组函数的使用无效 mysql2023-04-10 15:30回答 9 已采纳 你group by里面应该写s.config_order_user_id而不是s.config_order_user_name,因为你select语句里面是s.config_order_user_id
- 2022-06-21 19:56回答 2 已采纳 可能你根本没爬取到
- 2022-05-28 16:45回答 1 已采纳 这是一个警告,因为cur和conn在try里定义的,可能还没运行时就因有错跳到except里了,而except之后的代码还会执行,这是的cur和conn就有可能没有定义。所以有两种办法:一种在exce
- 2021-01-19 12:12趙瑾昀的博客 前几天遇到一个mysql游标不到数据问题,这个问题困扰了我两天,现在终于解决了,下面小编就来为大家分享一下。这是建表语句,插入两行数据drop table如果存在testinfo;创建表testinfo(name varchar(10)not null,...
- 2022-07-01 15:06浑水摸鱼仙君的博客 mysql基础篇——变量、流程控制与游标
- 2021-11-27 17:39Yacht13的博客 游标可以定位表中的每一行数据,可以实现逐条读取数据。 1. 声明游标 DECLARE 游标名 CURSOR FOR SELECT语句; 2. 打开游标 OPEN 游标名; 3.使用游标 FETH 游标名 INTO 变量名1 [,变量名2,......]; 4....
- 2020-12-15 08:51`FETCH`语句用于从游标中获取数据并将其存储到变量中: ``` FETCH cursor_name INTO var1, var2, ...; ``` 例如: ``` FETCH calc_bonus INTO re_id, re_salary, re_comm; ``` 这里的`re_id`、`re_salary`和`re_comm...
- 没有解决我的问题, 去提问