Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: SeñorX95 en 4 Mayo 2015, 11:22 am



Título: Ejercicio PL/SQL
Publicado por: SeñorX95 en 4 Mayo 2015, 11:22 am
Me pide que haga un programa en PL/SQL que calcule el numero de socios distintos que hayan alquilado cada pelicula. Los alquileres los saco de dos tablas: alquileres e historicoalquileres pero me tienen que salir juntos. Tengo este código pero no se juntar las dos tablas y que si es el mismo socio no me lo cuente dos veces.

Código
  1. SET SERVEROUTPUT ON;
  2. DECLARE
  3. UnPelicula peliculas%ROWTYPE;
  4. resultado INTEGER;
  5. resultado2 INTEGER;
  6. resultado3 INTEGER;
  7.  
  8.  
  9. BEGIN
  10. FOR UnPelicula IN
  11. (SELECT peliculas.codp,peliculas.nombrep, COUNT(DISTINCT alquileres.codc) AS TOTAL
  12. FROM socios, peliculas, alquileres
  13. WHERE peliculas.codp=alquileres.codp
  14. GROUP BY peliculas.codp,peliculas.nombrep
  15. ORDER BY TOTAL DESC)
  16.  
  17. LOOP
  18.  
  19. resultado:=UnPelicula.TOTAL;
  20.  
  21. END LOOP;
  22.    DBMS_OUTPUT.PUT_LINE('****HISTORICO-PRESTAMOS******');
  23.    DBMS_OUTPUT.PUT_LINE('****HISTORICO-PRESTAMOS******');
  24.    DBMS_OUTPUT.PUT_LINE('****HISTORICO-PRESTAMOS******');
  25. FOR UnPelicula IN
  26. (SELECT peliculas.codp,peliculas.nombrep, COUNT(DISTINCT historicoalquileres.codc) AS TOTAL
  27. FROM socios, peliculas, historicoalquileres
  28. WHERE peliculas.codp=historicoalquileres.codp
  29. GROUP BY peliculas.codp,peliculas.nombrep
  30. ORDER BY TOTAL DESC)
  31.  
  32. LOOP
  33.  
  34. resultado2:=UnPelicula.TOTAL;
  35. resultado3:=resultado+resultado2;
  36. DBMS_OUTPUT.PUT_LINE('**********');
  37. DBMS_OUTPUT.PUT_LINE(UnPelicula.nombrep ||' '|| resultado3 || ' Socios Distintos');
  38. DBMS_OUTPUT.PUT_LINE('**********');
  39. END LOOP;
  40.  
  41.  
  42. END;
  43. /