Cita:
Iniciado por josueruiz91
Intenté hacerlo a través de un procedimiento almacenado. Nunca había trabajado con algunos. Puedes decirme donde tengo el error? Asi tal cual no me funciona
DROP PROCEDURE IF EXISTS sp_autoincremento;
//
CREATE PROCEDURE sp_autoincremento()
BEGIN
if(exists(select libro,folio,boleta from biblioteca)) them
if(exists(select boleta from bautizo where mod(boleta,2)=0)) them
update bautizo set folio=folio+1;
if(exists(select boleta from bautizo where boleta=6)) them
update bautizo set boleta=1,folio=1,libro=libro+1;
else
update bautizo set boleta=boleta+1;
endif;
else
insert into bautizo(libro,folio,boleta) values(1,1,1);
endif;
END
//
Tienes más de un error, además de que estás planteando una solución sin analizarla previamente, lo que sólo te llevará a complicaciones.
1) No es THEM ("ellos"), sino THEN ("entonces").
2) No es ENDIF, sino END IF.
3) Tienes un IF sin cerrar al final.
4) No debes actualizar numeraciones, sino insertar registros nuevos. Esto me lleva a pensar que no está correctamente diseñado el modelo de datos.
Lo primero sería tratar de crear el algorimo que debería cumplirlo que quieres. Y eso se hace simplemente razonando lo que describes.
Debes:
1) Validar si existe el Libro (por consecuencia el prototipo del SP debería recibir al menos UN parámetro).
2) Si existe el libro: Validar cuál es el máximo de Boleta y del Folio para ese Libro.
2.3. Si Boleta < 3
2.3.1. Si Folio < 9 y es múltiplo de 3, sumar 1 a Boleta.
2.3.2. Sumar 1 a Folio.
3) Si no existe el Libro:
3.1. Dar de alta el Libro, la Boleta 1 y el Folio 1.
Un bosquejo de la idea, suponiendo que existen tres tablas (Libro, Biblioteca y Folio) sería mas o menos:
Código MySQL:
Ver originalDELIMITER $$
/*
1) Validar si existe el Libro (por consecuencia el prototipo del SP debería recibir al menos UN parámetro).
2) Si existe el libro: Validar cuál es el máximo de Boleta y del Folio para ese Libro.
2.3. Si Boleta < 3
2.3.1. Si Folio < 9 y es múltiplo de 3, sumar 1 a Boleta.
2.3.2. Sumar 1 a Folio.
3) Si no existe el Libro:
3.1. Dar de alta el Libro, la Boleta 1 y el Folio 1.
*/
WHERE libro
= v_libro
AND boleta
= v_boleta
SET v_boleta
= v_boleta
+ 1; SET v_folio
= v_folio
+ 1; SET v_libro
= v_libro
+ 1; SET v_libro
= v_libro
+ 1; SET v_boleta
= v_boleta
+ 1; SET v_folio
= v_folio
+ 1;
SET v_libro
= v_libro
+ 1;
Esto es nada más que una aproximación, a la que hay que probar. La estoy bosquejando a vuelo de pájaro, por lo que peude tener errores.