CREATE PROCEDURE `sp_get_estructura`(in_cliente int, in_opcion int, in_id_opcion int) BEGIN # Options: 1= DF, 2= DL, 3= Mun # Cursor Statement DECLARE geojson JSON; DECLARE done BOOLEAN DEFAULT FALSE; DECLARE uid INTEGER; DECLARE _max integer; DECLARE c1 CURSOR FOR (SELECT r.id FROM cat_secciones r WHERE ( CASE WHEN in_opcion = 1 THEN r.id_distritofederal = in_id_opcion WHEN in_opcion = 2 THEN r.id_distritolocal = in_id_opcion WHEN in_opcion = 3 THEN r.id_municipio = in_id_opcion ELSE r.id = in_id_opcion END) ); DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = FALSE; SET _max := (SELECT MAX(r.id) FROM cat_secciones r WHERE ( CASE WHEN in_opcion = 1 THEN r.id_distritofederal = in_id_opcion WHEN in_opcion = 2 THEN r.id_distritolocal = in_id_opcion WHEN in_opcion = 3 THEN r.id_municipio = in_id_opcion ELSE r.id = in_id_opcion END) ); SET geojson := '{"type": "FeatureCollection", "features": {"_id":"0", "type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[0,0]]]},"properties": ""}}'; # Inicio del Cursor IF _max IS NOT NULL THEN OPEN c1; c1_loop: LOOP FETCH c1 INTO uid; IF `done` THEN LEAVE c1_loop; END IF; SELECT JSON_set ( geojson, concat('$.features','[',s.id,']'), ( JSON_OBJECT ( '_id',s.id, 'type', 'Feature', 'properties', JSON_OBJECT('fillColor', getSeccionesColor(in_cliente,uid)), 'geometry', ST_AsGeoJSON(s.shape) ) ) ) INTO geojson FROM geo_secciones_json s WHERE s.id_seccion = uid ; IF _max = uid THEN LEAVE c1_loop; END IF; END LOOP c1_loop; CLOSE c1; END IF; # Cursor Cleaning IF _max IS NOT NULL THEN SET geojson := JSON_REMOVE(geojson, '$.features[0]'); END IF; # Cursor Sending SELECT geojson; END