· 8 years ago · May 24, 2018, 08:46 AM
1SELECT * FROM CIUDAD WHERE NOMBRE = 'Jining';
2
3DROP PROCEDURE IF EXISTS CAPTARREPETICIONES;
4DELIMITER //
5CREATE PROCEDURE CAPTARREPETICIONES(IN maxRepeticiones INT)
6BEGIN
7 DECLARE COUNTERREPETICIONES INT;
8 DECLARE NUMEROREPETICIONES INT DEFAULT 0;
9
10 DECLARE REQUIREDREPETICIONES INT DEFAULT 4;
11
12
13 DECLARE BACKNOMBRE VARCHAR(20);
14 DECLARE BACKCODIGOPAIS VARCHAR(5);
15
16 DECLARE CURRENTNOMBRE VARCHAR(20);
17 DECLARE CURENTCODIGOPAIS VARCHAR(5);
18
19
20 DECLARE ULTIMOPAIS BOOLEAN DEFAULT FALSE;
21
22 DECLARE CURRENTCIUDAD CURSOR FOR SELECT NOMBRE, CODIGOPAIS FROM CIUDAD ORDER BY CODIGOPAIS, NOMBRE;
23
24 DECLARE CONTINUE HANDLER FOR NOT FOUND SET ULTIMOPAIS = TRUE;
25
26 CREATE TEMPORARY TABLE CiudadPais (
27 `Codigo` char(3) NOT NULL DEFAULT '',
28 `Nombre` char(52) NOT NULL DEFAULT '',
29 `numeroRepeticiones` int NOT NULL DEFAULT 0
30 ) ENGINE=MEMORY;
31
32 OPEN CURRENTCIUDAD;
33
34 bucle: LOOP
35 SET BACKNOMBRE = CURRENTNOMBRE;
36 SET BACKCODIGOPAIS = CURENTCODIGOPAIS;
37
38 FETCH CURRENTCIUDAD INTO CURRENTNOMBRE, CURENTCODIGOPAIS;
39
40 IF COUNTERREPETICIONES >= maxRepeticiones || ((BACKCODIGOPAIS != CURENTCODIGOPAIS) || (BACKNOMBRE != CURRENTNOMBRE)) THEN
41 IF COUNTERREPETICIONES >= NUMEROREPETICIONES THEN
42 SET NUMEROREPETICIONES = NUMEROREPETICIONES + 1;
43 INSERT INTO CiudadPais VALUES (BACKCODIGOPAIS,BACKNOMBRE, COUNTERREPETICIONES);
44 END IF;
45 SET COUNTERREPETICIONES = 0;
46 ELSE
47 IF BACKNOMBRE = CURRENTNOMBRE && BACKCODIGOPAIS = CURENTCODIGOPAIS THEN
48 SET COUNTERREPETICIONES = COUNTERREPETICIONES + 1;
49 END IF;
50 END IF;
51
52 IF ULTIMOPAIS THEN
53 LEAVE bucle;
54 END IF;
55 END LOOP;
56
57 SELECT * FROM CiudadPais;
58 DROP TABLE CiudadPais;
59 CLOSE CURRENTCIUDAD;
60END//
61DELIMITER ;
62CALL CAPTARREPETICIONES(4);