1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| DROP FUNCTION IF EXISTS fdiag_patients_p;
-
CREATE FUNCTION fdiag_patients_p(p_h_ipp VARCHAR(16)) RETURNS CHAR(2)
BEGIN
DECLARE res CHAR(2);
DECLARE var_delta DECIMAL(4,1);
DECLARE var_isth_class VARCHAR(20);
DECLARE var_delta_prec DECIMAL(4,1);
DECLARE var_num_dossier VARCHAR(64);
DECLARE b BOOLEAN DEFAULT false;
DECLARE done TINYINT DEFAULT 0;
DECLARE curseur2 CURSOR FOR SELECT NUM_DOSSIER_GLIMS, delta, isth_class FROM Prelev_Multiples WHERE h_ipp = p_h_ipp;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN curseur2;
FETCH curseur2 INTO var_num_dossier, var_delta, var_isth_class;
SET var_delta_prec = var_delta;
REPEAT
FETCH curseur2 INTO var_num_dossier, var_delta, var_isth_class;
IF NOT done THEN
IF b THEN
IF var_isth_class != 'APS_Negative' AND var_isth_class IS NOT NULL THEN
SET res = 'mp';
END IF;
ELSE
SET var_delta = var_delta - var_delta_prec ;
IF (var_delta BETWEEN 12 AND 260) THEN
IF var_isth_class = 'APS_Negative' THEN
SET res = 'mm';
SET b = true;
ELSE
IF var_isth_class IS NOT NULL THEN
SET res = 'p';
SET done = 1;
END IF;
END IF;
END IF;
END IF;
SET var_delta_prec = var_delta;
END IF;
UNTIL done END REPEAT;
CLOSE curseur2;
RETURN (res);
END
- |
Partager