Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/06/2012, 16:33
Avatar de migue1891
migue1891
 
Fecha de Ingreso: enero-2012
Mensajes: 50
Antigüedad: 12 años, 3 meses
Puntos: 0
Problemas con procedimiento con cursor

Muy buenas, tengo problemas para hacer un procedimiento y queria ver si me podeis echar una mano.

Quiero que insertando el genero de un libro me de los datos del titulo el autor(nombre y apellido), año de publicacion, nacionalidad del autor, y que estos datos me los Inserte en una tabla que tengo para mostrar los datos.

Esta es la relacion de las tablas:

Libros (id_libro, titulo, apubli, id_genero)
autor (id_autor, nombre apellido, nacionalidad)
libroautor (id_libro, id_autor)
genero (id_genero, nombre)

cursorGenero(titulo, nombre y apellido autor, apubli, nacionalidad)

y ese es el procedimiento que he creado.

Código SQL:
Ver original
  1. CREATE PROCEDURE buscarPorGenero (p_genero VARCHAR(30))
  2.  
  3. BEGIN
  4.  
  5. DECLARE curGenero CURSOR FOR
  6.  
  7. SELECT Libros.titulo, autor.nombre, autor.apellido, Libros.apubli, autor.nacionalidad
  8. FROM (Libros INNER JOIN libroautor ON Libros.id_libro=libroautor.id_libro)
  9.  INNER JOIN autor ON libroautor.id_autor=autor.id_autor
  10. WHERE Libros.id_genero = (SELECT id_genero
  11. FROM genero WHERE nombre=p_genero);
  12.  
  13. DECLARE v_titulo VARCHAR(150)
  14. DECLARE v_nombre VARCHAR(60)
  15. DECLARE v_apellido VARCHAR(60);
  16. DECLARE v_apubli INT(4);
  17. DECLARE v_nacionalidad VARCHAR(60);
  18.  
  19. OPEN curGenero; curGenero_loop: LOOP
  20.     FETCH curGenero INTO v_titulo, v_nombre, v_apellido, v_apubli, v_nacionalidad;
  21.     INSERT INTO cursorGenero VALUES (v_nombre, v_apellido, v_apubli, v_nacionalidad);
  22.  
  23. END LOOP curGenero_loop;
  24.  
  25. SELECT * FROM cursorGenero;
  26.  
  27. CLOSE curGenero;
  28.  
  29. END buscarPorGenero;

Cualquier ayuda la agradecere enormemente ya que estoy bastante apurado con este tema. Un saludo y Muchas gracias.

Última edición por migue1891; 21/06/2012 a las 16:38