mysql存储过程实现数据查询与插入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql存储过程实现数据查询与插入相关的知识,希望对你有一定的参考价值。

数据表名sys_users:字段:id,ref_group_id,phone,decri,通过存储过程传入ref_group_id,decri两个参数,在sys_users中查出传入的ref_group_id的所有的数据,对传入的参数decri进行判断是否包含#系统#(为系统关键字),将根据传入参数ref_group_id查询的结果(如:select ref_group_id,decri from sys_users where ref_group_id in (1,2,3))查询返回的数据对这些结果的decri列进行判断是否包含#系统#,如果包含进行替换为A,并插入到sys_tem表,没有则不进行插入操作,需要记录插入的条数与未插入的条数
具体细节联系我QQ:286898781

参考技术A INSERT into total_score_tmpD(
DepartmentNameEnd, StaffId,
StaffName,
CountPerHour,
SkillScoreDisCount ,
DealCount ,
ValueCount,
ValueCountDisCount
)
SELECT DepartmentName, StaffId,
StaffName,
3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*AVG(DealAvgSeconds/WaitSeconds) ,
Round(3600/(Select DealAvgSeconds from deal_name_type where DealId='121300')*avg(DealAvgSeconds/WaitSeconds)/(select Max(SunValue) From total_score_tmp33)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作技能权重'),2),
count(StaffId),
Sum(DealValue),
Round(Sum(DealValue)/(select Max(SunValue) From total_score_tmp44)*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='工作效益权重'),2)
From deal_record
where DepartmentName like concat(DepartmentName2,'%') and DealDateTime BETWEEN STARTDealDateTime and endDealDateTime
group by StaffId;

insert into total_score_tmpc(DepartmentName , StaffId,
StaffName,
ClientNum ,
EvaluateScore ,
EvaluateScoreDisCount)
SELECT DepartmentName, StaffId,
StaffName,
count(StaffId),
Sum(EvaluatePrice),
Round((Sum(EvaluatePrice)/(select Max(SunValue) From total_score_tmp22))*(select CAST(OptionValue as decimal) from sys_info WHERE OptionName='服务评价权重'),2)
From evaluate_record
where DepartmentName like concat(DepartmentName2,'%') and EvaluateDateTime BETWEEN STARTDealDateTime and endDealDateTime
group by StaffId;

mysql中关于存储过程无法实现迁移复制表中数据问题

一 问题描述

1.1 问题描述

编写了一个存储过程,逻辑是查询某一张表中部分字段的数据,然后插入到另外一张新表中。但是发现在操作过程,插入都是null。

1.存储过程

#select * from tb_stu


drop PROCEDURE IF EXISTS p_sync_stu;
CREATE PROCEDURE p_sync_stu()
begin
-- 需要定义接收游标数据的变量
  declare id    int(10);
  declare u_name varchar(255);
	declare u_age   int(10);
	declare create_date TIMESTAMP;
	declare flag  int default 0;  -- 定义标记变量
	-- 创建游标,查询学生信息数据
	declare stu_data_List cursor for select u_name from tb_stu where create_time>='2022-07-27 10:00:00';
	-- 游标结束后,将标记量改为1
	declare exit  handler for not found set flag=1;
	-- 开启游标
	open stu_data_List;
	-- 循环遍历游标
	repeat 
	  -- 使用游标,遍历结果数据
		fetch stu_data_List into u_name;
		-- 将数据保存到表中
		insert into tb_stu3  values(u_name);
	until flag=1
  end repeat;	
	-- 关闭游标
	close stu_data_List;
end
	
	call  p_sync_stu();

2.截图 

 3.执行存储过程后,插入表中数据

1.2 解决办法

经过千山万水的排查,终于发现定义游标的时候: declare stu_data_List cursor for select  xx  的字段名和要声明的字段名称,不能一致,不能重名。

 修改后的存储过程,再次执行,查看表中数据,如下图所示: 可以看到已经有了数据!

 

 

 

以上是关于mysql存储过程实现数据查询与插入的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程从列表中插入多行

mysql中关于存储过程无法实现迁移复制表中数据问题

利用mysql存储过程循环插入新数据并更新

mysql使用存储过程&函数实现批量插入

mysql存储过程怎样批量插入数据

如何在sql创建一条插入数据的存储过程