MySQL儲存過程從另外兩個表中取資料存整合其他資料儲存在一張新的表裡
阿新 • • 發佈:2019-01-08
業務需求:
通過傳入的引數x 從A表拿A.NAME(唯一一條記錄),從B表拿B.ID,B.NAME(多條記錄),儲存至C表。
DROP PROCEDURE IF EXISTS P_AUTO_SCHEDULING; CREATE PROCEDURE P_AUTO_SCHEDULING(IN v_hosptialId VARCHAR(50)) BEGIN DECLARE i INT DEFAULT 0; DECLARE v_days INT DEFAULT 30; DECLARE v_uuid VARCHAR(32); DECLARE v_curdate date; DECLARE v_weekTypeid VARCHAR(15); DECLARE v_hosptialName VARCHAR(255); DECLARE v_orgId VARCHAR(50); DECLARE v_orgName VARCHAR(255); DECLARE orgid_hosp VARCHAR(50); DECLARE orgid VARCHAR(50); DECLARE orgname_hosp VARCHAR(255); DECLARE orgname VARCHAR(255); DECLARE idx INT DEFAULT 0; /*是否達到記錄的末尾控制變數*/ DECLARE cur_1 CURSOR FOR SELECT t1.orgid_hosp AS orgid_hosp, t2.orgid AS orgid, t1.orgname_hosp AS orgname_hosp, t2.orgname AS orgname FROM t_hosp t1, t_org t2 WHERE t1.orgid_hosp = t2.orgId_hosp AND t1.orgid_hosp = v_hosptialId; DECLARE CONTINUE HANDLER FOR NOT FOUND SET idx = 1; OPEN cur_1; FETCH cur_1 INTO orgid_hosp, orgid, orgname_hosp, orgname; /*獲取第一條記錄*/ IF <span style="font-family: Arial, Helvetica, sans-serif;">idx</span><span style="font-family: Arial, Helvetica, sans-serif;"><>1 THEN</span> WHILE i < v_days DO SET v_uuid = UNIX_TIMESTAMP(TIMESTAMPADD(DAY, i, CURRENT_TIMESTAMP)); SET v_curdate = DATE_ADD(CURRENT_DATE, INTERVAL i DAY); SET v_weekTypeid = DAYOFWEEK(DATE_ADD(CURRENT_DATE, INTERVAL i DAY)); INSERT INTO t_pao_clinic ( uuid, curdate, registid, date_typeid, limit_amount, used_amount, stop_flag, resstartno, usedres_amount, limit_resamount, orgid_hosp, orgname_hosp, orgid, orgname, week_typeid ) ( SELECT * FROM (SELECT UUID() AS uuid, DATE_ADD(CURRENT_DATE, INTERVAL i DAY) AS curdate, UUID() AS registid, '01' AS date_typeid, 127 AS limit_amount, 0 AS used_amount, 0 AS stop_flag, 0 AS resstartno, 0 AS usedres_amount, 20 AS limit_resamount, t1.orgid_hosp AS orgid_hosp, t2.orgid AS orgid, t1.orgname_hosp AS orgname_hosp, t2.orgname AS orgname, DAYOFWEEK(DATE_ADD(CURRENT_DATE, INTERVAL i DAY))AS week_typeid FROM t_hosp t1, t_org t2 WHERE t1.orgid_hosp = t2.orgId_hosp AND t1.orgid_hosp = v_hosptialId UNION SELECT UUID() AS uuid, DATE_ADD(CURRENT_DATE, INTERVAL i DAY) AS curdate, UUID() AS registid, '02' AS date_typeid, 127 AS limit_amount, 0 AS used_amount, 0 AS stop_flag, 0 AS resstartno, 0 AS usedres_amount, 20 AS limit_resamount, t1.orgid_hosp AS orgid_hosp, t2.orgid AS orgid, t1.orgname_hosp AS orgname_hosp, t2.orgname AS orgname, DAYOFWEEK(DATE_ADD(CURRENT_DATE, INTERVAL i DAY))AS week_typeid FROM t_hosp t1, t_org t2 WHERE t1.orgid_hosp = t2.orgId_hosp AND t1.orgid_hosp = v_hosptialId) AS t3); SET i = i + 1; FETCH cur_1 INTO orgid_hosp, orgid, orgname_hosp, orgname; /*獲取下一條記錄*/ END WHILE; END IF; close cur_1; END;