MYSQL存储过程 求帮助,数据库报错
- 技术交流
- 2024-09-25 19:18:01
最近项目有个功能
大概是这样的
复制一个信息,同时把该信息的关联表数据也同时复制
大概结构是 一个表的一条数据 A表 对应 另外多长张表的多个数据 B表
例如 A 表的 ID 1 对应 B表的 多条数据 B表的AID 和A表的ID 关联
如果用存储过程方式 来实现这个循环 复制更改 该如何去做? 求个例子
我现在 复制了 A表的ID 1 的数据 如果根据 这个ID 循环复制 B表中 对应这个ID的数据??
set i=0;
while i<? do
?
end WHILE;
这个循环 不知道怎么写下去了。。
"
这是典型的游标应用,给你个例子
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE _emp_id int;
DECLARE _emp_name varchar(30);
declare _travel_days int default 0; -- 出差天数
declare _add_hour decimal(7,2) default 0.0; -- 加班工时
declare _travle_cost decimal(10,2) default 0.0; -- 差旅成本
-- 根据deptid查询部门所有员工
DECLARE cursor_emps CURSOR FOR select emp_id,emp_name from emp where dept_id = deptid and sts = 'A' and srv_dept_id = 30;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
-- 创建临时表存储结果集
create TEMPORARY table tmp_return_lst(
empname varchar(30) not null
,traveldays int not null
,addhour decimal(7,2) not null
,travlecost decimal(10,2) not null
);
-- 清除表数据
truncate table tmp_return_lst;
OPEN cursor_emps;
REPEAT
FETCH cursor_emps INTO _emp_id, _emp_name;
IF NOT done THEN
-- 查询每名员工的出差天数
select f_travel_day(_emp_id,sd , ed) into _travel_days;
-- 查询每名员工的实际加班工时
select f_actual_add_hour(_emp_id,sd , ed) into _add_hour;
-- 获得每名员工的出差报销金额
select sum(t.tm) into _travle_cost from (
select
distinct b.est_id
,round(b.total_price/b.empcount,2) as tm
from expenseaccount_check_repeat a, expenseaccount_travel b
where a.emp_id = _emp_id and a.check_date between sd and ed
and a.est_id = b.est_id) as t;
-- 将整理的数据insert临时表
insert into tmp_return_lst values(_emp_name,ifnull(_travel_days,0),ifnull(_add_hour,0.0),ifnull(_travle_cost,0.0));
END IF;
UNTIL done END REPEAT;
CLOSE cursor_emps;
-- 返回结果
select * from tmp_return_lst;
END
MYSQL存储过程 求帮助,数据库报错由讯客互联技术交流栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MYSQL存储过程 求帮助,数据库报错”