From 29ece49e54e7310f876cafc0a4df753824eeeaf7 Mon Sep 17 00:00:00 2001 From: GID Projects Date: Sun, 26 Jul 2020 11:20:45 -0400 Subject: [PATCH] no message --- procedures.sql | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/procedures.sql b/procedures.sql index e4958c5..aa52e7e 100644 --- a/procedures.sql +++ b/procedures.sql @@ -49,3 +49,79 @@ BEGIN CLOSE C_GANAR; 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; +/