|
|
|
@ -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; |
|
|
|
|
/ |
|
|
|
|