"
最近项目有个功能
大概是这样的
复制一个信息,同时把该信息的关联表数据也同时复制
大概结构是 一个表的一条数据 A表 对应 另外多长张表的多个数据 B表
例如 A 表的 ID 1 对应 B表的 多条数据 B表的AID 和A表的ID 关联
如果用存储过程方式 来实现这个循环 复制更改 该如何去做? 求个例子
我现在 复制了 A表的ID 1 的数据 如果根据 这个ID 循环复制 B表中 对应这个ID的数据??
set i=0;
while i<? do
?
end WHILE;
这个循环 不知道怎么写下去了。。
"
这是典型的游标应用,给你个例子
这里是mysql 存储过程的官方文档,请参考http://www.ostools.net/apidocs/apidoc?api=mysql-5.1-zh
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 存储过程的官方文档,请参考http://www.ostools.net/apidocs/apidoc?api=mysql-5.1-zh
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。