drop procedure if exists UpdateUserOrg;
CREATE PROCEDURE UpdateUserOrg()
BEGIN
-- 创建接收游标数据的变量
declare v_lob_number varchar(20);
declare v_lob_group varchar(20);
declare v_lob varchar(20);
declare v_budu varchar(20);
declare v_dd varchar(20);
--
declare total int default 0; -- 创建总数变量
declare done int default false; -- 创建结束标志变量
-- 创建游标
declare cur cursor for select lob_number,lob_group,lob,budu,dd from OA_org_update_info;
declare continue HANDLER for not found set done = true; -- 指定游标循环结束时的返回值
set total = 0; -- 设置初始值
open cur; -- 打开游标
read_loop:loop -- 开始循环游标里的数据
fetch cur into v_lob_number,v_lob_group,v_lob,v_budu,v_dd; -- 根据游标当前指向的一条数据
if done then -- 判断游标的循环是否结束
leave read_loop; -- 跳出游标循环
end if;
-- 获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,
IF v_dd is not null and v_dd!='' //dd交付部设置
THEN
UPDATE `USER` SET dept_id =ifnull(( //根据交付部
SELECT dept_id FROM DEPARTMENT
WHERE dept_parent IN (
SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_budu,''),"%"))
AND dept_name LIKE CONCAT("%",ifnull(v_dd,''),"%")
),0)
WHERE
remark=v_lob_number;
ELSEIF v_budu is not null and v_budu!='' //budu事业部设置
THEN
UPDATE `USER` SET dept_id = ifnull((
SELECT dept_id FROM DEPARTMENT
WHERE dept_parent IN (
SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_lob,''),"%"))
AND dept_name LIKE CONCAT("%",ifnull(v_budu,''),"%")
),0)
WHERE
remark=v_lob_number;
ELSEIF v_lob is not null and v_lob!='' //lob业务线设置
THEN
UPDATE `USER` SET dept_id = ifnull((
SELECT dept_id FROM DEPARTMENT
WHERE dept_parent IN (
SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_lob_group,''),"%"))
AND dept_name LIKE CONCAT("%",ifnull(v_lob,''),"%")
),0)
WHERE
remark=v_lob_number;
ELSE //lob_group业务群设置
UPDATE `USER` SET dept_id = ifnull((
SELECT dept_id FROM DEPARTMENT
WHERE dept_name LIKE CONCAT("%",ifnull(v_lob_group,''),"%")
),0)
WHERE
remark=v_lob_number;
END IF;
set total = total + 1; -- 结束游标循环
end loop; -- 关闭游标
close cur;
-- 输出不成功结果,分析为什么DEPT_ID为0,一般为OA_org_update_info部门信息有误
select lob_number,lob_group,lob,budu,dd from OA_org_update_info where lob_number in (
select user_id from USER where substr(USER_id,2,length(user_id)-1) in (
select lob_number from OA_org_update_info
)
and dept_id='0'
);
select total;
END;
call UpdateUserOrg();
drop procedure UpdateUserOrg
CREATE PROCEDURE UpdateUserOrg()
BEGIN
-- 创建接收游标数据的变量
declare v_lob_number varchar(20);
declare v_lob_group varchar(20);
declare v_lob varchar(20);
declare v_budu varchar(20);
declare v_dd varchar(20);
--
declare total int default 0; -- 创建总数变量
declare done int default false; -- 创建结束标志变量
-- 创建游标
declare cur cursor for select lob_number,lob_group,lob,budu,dd from OA_org_update_info;
declare continue HANDLER for not found set done = true; -- 指定游标循环结束时的返回值
set total = 0; -- 设置初始值
open cur; -- 打开游标
read_loop:loop -- 开始循环游标里的数据
fetch cur into v_lob_number,v_lob_group,v_lob,v_budu,v_dd; -- 根据游标当前指向的一条数据
if done then -- 判断游标的循环是否结束
leave read_loop; -- 跳出游标循环
end if;
-- 获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,
IF v_dd is not null and v_dd!='' //dd交付部设置
THEN
UPDATE `USER` SET dept_id =ifnull(( //根据交付部
SELECT dept_id FROM DEPARTMENT
WHERE dept_parent IN (
SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_budu,''),"%"))
AND dept_name LIKE CONCAT("%",ifnull(v_dd,''),"%")
),0)
WHERE
remark=v_lob_number;
ELSEIF v_budu is not null and v_budu!='' //budu事业部设置
THEN
UPDATE `USER` SET dept_id = ifnull((
SELECT dept_id FROM DEPARTMENT
WHERE dept_parent IN (
SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_lob,''),"%"))
AND dept_name LIKE CONCAT("%",ifnull(v_budu,''),"%")
),0)
WHERE
remark=v_lob_number;
ELSEIF v_lob is not null and v_lob!='' //lob业务线设置
THEN
UPDATE `USER` SET dept_id = ifnull((
SELECT dept_id FROM DEPARTMENT
WHERE dept_parent IN (
SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_lob_group,''),"%"))
AND dept_name LIKE CONCAT("%",ifnull(v_lob,''),"%")
),0)
WHERE
remark=v_lob_number;
ELSE //lob_group业务群设置
UPDATE `USER` SET dept_id = ifnull((
SELECT dept_id FROM DEPARTMENT
WHERE dept_name LIKE CONCAT("%",ifnull(v_lob_group,''),"%")
),0)
WHERE
remark=v_lob_number;
END IF;
set total = total + 1; -- 结束游标循环
end loop; -- 关闭游标
close cur;
-- 输出不成功结果,分析为什么DEPT_ID为0,一般为OA_org_update_info部门信息有误
select lob_number,lob_group,lob,budu,dd from OA_org_update_info where lob_number in (
select user_id from USER where substr(USER_id,2,length(user_id)-1) in (
select lob_number from OA_org_update_info
)
and dept_id='0'
);
select total;
END;
call UpdateUserOrg();
drop procedure UpdateUserOrg