-- Stored procedure 1 -- Se usa el año para mostrar los resultados en tal año -- Si se pasa el valor 0 por el año se muestra por todos los años en vez de un año especifico CREATE OR REPLACE PROCEDURE CUADRO_HONOR(ANO_IN INTEGER) IS V_NOMBRE PAIS.NOMBRE%TYPE; V_PUNTAJE INTEGER; CURSOR C_GANAR IS SELECT P2.NOMBRE, SUM( CASE WHEN TRIM(LOWER(M.DESCRIPCION)) = 'oro' THEN 3 WHEN TRIM(LOWER(M.DESCRIPCION)) = 'plata' THEN 2 WHEN TRIM(LOWER(M.DESCRIPCION)) = 'bronce' THEN 1 ELSE 0 END ) AS PUNTAJE FROM GANAR G JOIN COMPETER_POR C ON (C.ID_ATLETA = G.ID_ATLETA) JOIN PERTENECER P ON (P.ID_DELEGACION = C.ID_DELEGACION) JOIN PAIS P2 ON (P2.ID_PAIS = P.ID_PAIS) JOIN MEDALLA M ON (M.ID_MEDALLA = G.ID_MEDALLA) WHERE ( ANO_IN = CASE WHEN ANO_IN != 0 THEN EXTRACT(YEAR FROM G.FECHA) ELSE ANO_IN END ) GROUP BY P2.NOMBRE ORDER BY PUNTAJE DESC; BEGIN OPEN C_GANAR; FETCH C_GANAR INTO V_NOMBRE, V_PUNTAJE; DBMS_OUTPUT.PUT_LINE('País' || CHR(9) || CHR(9) || 'Puntaje'); WHILE C_GANAR%FOUND LOOP DBMS_OUTPUT.PUT_LINE(V_NOMBRE || CHR(9) || CHR(9) || V_PUNTAJE); FETCH C_GANAR INTO V_NOMBRE, V_PUNTAJE; END LOOP; CLOSE C_GANAR; END; \