mysql - 创建映射并在 MySQL 存储过程中使用它
问题描述
我正在做一个迁移项目,数据需要从系统A迁移到系统B。系统A和系统B中的id会不同。因此维护一个包含源列和目标列的表。
作为迁移的一部分,对于来自源 A 的每条记录,我需要去映射表中找到对应的目标值。我只是想避免为每个查询查询映射表。有没有办法将映射表存储为存储过程中的键值映射并查询映射而不是直接访问表?
我在 MySQL 存储过程中搜索集合,但没有找到任何东西。
数据库 A:-
表:员工
---------------------------------
id | name | email |
---------------------------------
10021 | First1 | first@test.com |
---------------------------------
10035 | First 2| first@test.com |
---------------------------------
数据库 B:-
表:员工
---------------------------------
id | name | email |
---------------------------------
1 | First1 | first@test.com |
---------------------------------
2 | First 2| first@test.com |
---------------------------------
表: emp_mapping
----------------------
source_id | target_id|
----------------------
10021 | 1 |
----------------------
10035 | 2 |
----------------------
迁移的存储过程
DELIMITER //
CREATE PROCEDURE LoadEmployees()
BEGIN
DECLARE db1_empl_id INT;
DECLARE db1_empl_name VARCHAR(20);
DECLARE db1_empl_email VARCHAR(40);
DECLARE db2_empl_id INT;
DECLARE cur CURSOR FOR SELECT id, name, email FROM db1.employees;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET cursor_finished = 1;
open cur;
cur_loop: LOOP
FETCH cur INTO db1_empl_id, db1_empl_name, db1_empl_email;
IF cursor_finished = 1 THEN
LEAVE cur_loop;
END IF;
-- cursor loop statements
-- I would like to move this to a map instead of querying for each record
select target_id into db2_empl_id from db2.emp_mapping where source_id = db1_empl_id;
insert into db2.employee(id,name,email) values(db2_empl_id, db1_empl_name, db1_empl_email);
SET cursor_finished = 0; -- hence reset this value for cursor.
end LOOP;
close cur;
END //
DELIMITER ;
解决方案
推荐阅读
- shortcode - 数据内容中的 11 个简码未呈现
- java - Kibana 启用了您当前浏览器不符合的严格安全要求
- python - Python - 在 Windows 上获取实际文件名(使用正确的大小写)?
- elasticsearch - Jmeter对ElasticSearch的http请求中的三引号
- python - 进行价值选择的最快方法?
- python-3.x - python中sorted()函数背后的逻辑
- flutter - 在 Flutter 中使用 Dio 包下载多个文件
- flutter - 如何将 Flutter 应用设置为默认短信应用?
- javascript - 如何不对所有选择激活选择功能
- swift - 按钮stackView间距不起作用-Swift-以编程方式