47 lines
974 B
MySQL
47 lines
974 B
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`zone_getPostalCode`(vSelf INT)
|
||
|
BEGIN
|
||
|
/**
|
||
|
* Devuelve los códigos postales incluidos en una zona
|
||
|
*/
|
||
|
DECLARE vGeoFk INT DEFAULT NULL;
|
||
|
|
||
|
CREATE OR REPLACE TEMPORARY TABLE tmp.zoneNodes (
|
||
|
geoFk INT,
|
||
|
name VARCHAR(100),
|
||
|
parentFk INT,
|
||
|
sons INT,
|
||
|
isChecked BOOL DEFAULT 0,
|
||
|
zoneFk INT,
|
||
|
PRIMARY KEY zoneNodesPk (zoneFk, geoFk),
|
||
|
INDEX(geoFk))
|
||
|
ENGINE = MEMORY;
|
||
|
|
||
|
CALL zone_getLeaves(vSelf, NULL , NULL, TRUE);
|
||
|
|
||
|
UPDATE tmp.zoneNodes
|
||
|
SET isChecked = 0
|
||
|
WHERE parentFk IS NULL;
|
||
|
|
||
|
myLoop: LOOP
|
||
|
SET vGeoFk = NULL;
|
||
|
SELECT geoFk INTO vGeoFk
|
||
|
FROM tmp.zoneNodes
|
||
|
WHERE NOT isChecked
|
||
|
LIMIT 1;
|
||
|
|
||
|
CALL zone_getLeaves(vSelf, vGeoFk, NULL, TRUE);
|
||
|
UPDATE tmp.zoneNodes
|
||
|
SET isChecked = TRUE
|
||
|
WHERE geoFk = vGeoFk;
|
||
|
|
||
|
IF vGeoFk IS NULL THEN
|
||
|
LEAVE myLoop;
|
||
|
END IF;
|
||
|
END LOOP;
|
||
|
|
||
|
DELETE FROM tmp.zoneNodes
|
||
|
WHERE sons > 0;
|
||
|
END$$
|
||
|
DELIMITER ;
|