Merge pull request #29 from cromerc/feature_procedure2

no message
This commit is contained in:
Chris Cromer 2020-07-26 19:20:11 -04:00 committed by GitHub
commit dddf54f358
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -49,3 +49,79 @@ BEGIN
CLOSE C_GANAR; CLOSE C_GANAR;
END; END;
/ /
/* Stored procedure 2 */
/* Busca los Lugares una id, suma todas las coincidencias de Precompetencia y Competencia y devuelve la suma */
CREATE OR REPLACE PROCEDURE OBTENER_CONTADOR(IDLUGAR IN INTEGER, SUMA OUT INTEGER)
IS
V_ID_PAIS PAIS.ID_PAIS%TYPE;
V_NOMBRE PAIS.NOMBRE%TYPE;
V_CONTADOR INTEGER;
V_SUMA INTEGER DEFAULT 0;
CURSOR L_PC IS
SELECT L.ID_LUGAR, L.NOMBRE, COUNT(*) AS CONTADOR_PRECOMPETENCIA
FROM PRECOMPETENCIA PC
LEFT JOIN LUGAR L ON (PC.LUGAR = L.ID_LUGAR)
WHERE L.ID_LUGAR = IDLUGAR
GROUP BY (L.ID_LUGAR, L.NOMBRE);
CURSOR L_C IS
SELECT L.ID_LUGAR, L.NOMBRE, COUNT(*) AS CONTADOR_COMPETENCIA
FROM COMPETENCIA C
LEFT JOIN LUGAR L ON (C.LUGAR = L.ID_LUGAR)
WHERE L.ID_LUGAR = IDLUGAR
GROUP BY (L.ID_LUGAR, L.NOMBRE);
BEGIN
OPEN L_PC;
FETCH L_PC INTO V_ID_PAIS, V_NOMBRE, V_CONTADOR;
WHILE L_PC%FOUND
LOOP
V_SUMA := V_SUMA + V_CONTADOR;
FETCH L_PC INTO V_ID_PAIS, V_NOMBRE, V_CONTADOR;
END LOOP;
CLOSE L_PC;
OPEN L_C;
FETCH L_C INTO V_ID_PAIS, V_NOMBRE, V_CONTADOR;
WHILE L_C%FOUND
LOOP
V_SUMA := V_SUMA + V_CONTADOR;
FETCH L_C INTO V_ID_PAIS, V_NOMBRE, V_CONTADOR;
END LOOP;
CLOSE L_C;
SUMA := V_SUMA;
END;
/* Ordena los lugares en base a las condiciones dadas */
CREATE OR REPLACE PROCEDURE ORDENACION_LUGAR
IS
SUMA INTEGER;
IDL LUGAR.ID_LUGAR%TYPE;
NOMBREL LUGAR.NOMBRE%TYPE;
CURSOR lugares IS
SELECT L.ID_LUGAR, L.NOMBRE
FROM LUGAR L;
BEGIN
OPEN lugares;
FETCH lugares INTO IDL, NOMBREL;
WHILE lugares%FOUND LOOP
SUMA :=0;
OBTENER_CONTADOR(IDL, SUMA);
IF SUMA >= 10 THEN
DBMS_OUTPUT.put_line('El lugar ' || NOMBREL || ' Es de Clasificacion "LUGAR PRINCIPAL" con una cantidad de: ' || SUMA);
ELSIF SUMA >= 5 and SUMA < 9 THEN
DBMS_OUTPUT.put_line('El lugar ' || NOMBREL || ' Es de Clasificacion "LUGAR PRIMARIO" con una cantidad de: ' || SUMA);
ELSIF SUMA < 5 THEN
DBMS_OUTPUT.put_line('El lugar ' || NOMBREL || ' Es de Clasificacion "LUGAR SECUNDARIO" con una cantidad de: ' || SUMA);
END IF;
FETCH lugares INTO IDL, NOMBREL;
END LOOP;
END;
/