DELIMITER $$USE `msdb`$$DROP PROCEDURE IF EXISTS `dicom_move_del`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `dicom_move_del`()
BEGIN
DECLARE del_type_temp VARCHAR(40);
DECLARE uid_temp VARCHAR(200);
DECLARE dicom_path VARCHAR(200);
DECLARE _v_done INT DEFAULT 0;
DECLARE temFlag INT;
DECLARE del_cur CURSOR FOR SELECT del_type,dicom_uid FROM dicom_move_temp a
WHERE NOT EXISTS(SELECT 1 FROM dicom_move_temp WHERE a.dicom_uid=dicom_uid AND a.id<id);
DECLARE CONTINUE HANDLER FOR NOT FOUND,SQLSTATE '02000' SET _v_done = 1;
OPEN del_cur;
FETCH del_cur INTO del_type_temp ,uid_temp;
REPEAT
IF NOT _v_done THEN
IF del_type_temp='patient' THEN
DELETE a,b FROM patient a,dicom_move_temp b WHERE a.patientId = b.dicom_uid AND a.patientId=uid_temp;
END IF;
IF del_type_temp='study' THEN
DELETE a,b FROM study a,dicom_move_temp b WHERE a.studyInstanceUID = b.dicom_uid AND a.studyInstanceUID=uid_temp;
END IF;
IF del_type_temp='series' THEN
DELETE a,b FROM series a,dicom_move_temp b WHERE a.seriesInstanceUID = b.dicom_uid AND a.seriesInstanceUID=uid_temp;
END IF;
IF del_type_temp='instance' THEN
UPDATE dicom_move_temp SET filepath = (SELECT filepath FROM dicom_file_info f
WHERE NOT EXISTS(SELECT 1 FROM dicom_file_info WHERE f.sopinstanceUid=sopinstanceUid AND f.id<id) AND sopinstanceUid=uid_temp);
DELETE a,b FROM instance a,dicom_file_info b WHERE a.sopInstanceUID = b.sOPInstanceUID AND a.sOPInstanceUID=uid_temp;
END IF;
FETCH del_cur INTO del_type_temp ,uid_temp;
COMMIT;
END IF;
UNTIL _v_done =1
END REPEAT;
CLOSE del_cur;
END$$DELIMITER ;
表里面有 为 patient,study,series,instance , 为什么没有按我写的逻辑执行完呢 如 有的 patient的语句都没删除,哪里逻辑不对啊
BEGIN
DECLARE del_type_temp VARCHAR(40);
DECLARE uid_temp VARCHAR(200);
DECLARE dicom_path VARCHAR(200);
DECLARE _v_done INT DEFAULT 0;
DECLARE temFlag INT;
DECLARE del_cur CURSOR FOR SELECT del_type,dicom_uid FROM dicom_move_temp a
WHERE NOT EXISTS(SELECT 1 FROM dicom_move_temp WHERE a.dicom_uid=dicom_uid AND a.id<id);
DECLARE CONTINUE HANDLER FOR NOT FOUND,SQLSTATE '02000' SET _v_done = 1;
OPEN del_cur;
FETCH del_cur INTO del_type_temp ,uid_temp;
REPEAT
IF NOT _v_done THEN
IF del_type_temp='patient' THEN
DELETE a,b FROM patient a,dicom_move_temp b WHERE a.patientId = b.dicom_uid AND a.patientId=uid_temp;
END IF;
IF del_type_temp='study' THEN
DELETE a,b FROM study a,dicom_move_temp b WHERE a.studyInstanceUID = b.dicom_uid AND a.studyInstanceUID=uid_temp;
END IF;
IF del_type_temp='series' THEN
DELETE a,b FROM series a,dicom_move_temp b WHERE a.seriesInstanceUID = b.dicom_uid AND a.seriesInstanceUID=uid_temp;
END IF;
IF del_type_temp='instance' THEN
UPDATE dicom_move_temp SET filepath = (SELECT filepath FROM dicom_file_info f
WHERE NOT EXISTS(SELECT 1 FROM dicom_file_info WHERE f.sopinstanceUid=sopinstanceUid AND f.id<id) AND sopinstanceUid=uid_temp);
DELETE a,b FROM instance a,dicom_file_info b WHERE a.sopInstanceUID = b.sOPInstanceUID AND a.sOPInstanceUID=uid_temp;
END IF;
FETCH del_cur INTO del_type_temp ,uid_temp;
COMMIT;
END IF;
UNTIL _v_done =1
END REPEAT;
CLOSE del_cur;
END$$DELIMITER ;
表里面有 为 patient,study,series,instance , 为什么没有按我写的逻辑执行完呢 如 有的 patient的语句都没删除,哪里逻辑不对啊
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货