hola, os comento mi problema. tengo que entregar un proyecto de una base de datos y tiene que ir acotado con triggers. el proyecto es sobre una comisaria.
esta tiene a delincuentes en calabozos y quiero que haya un maximo de 4 delincuentes por calabozo. si hubira mas que sacase un mensaje por pantalla diciendo que no puede insertar porque ese calabozo esta lleno. tengo el codigo asi:
delimiter |
CREATE TRIGGER d_indel BEFORE INSERT ON delincuente
FOR EACH ROW BEGIN
declare dni char(9);
declare contador int;
declare cantidad int;
declare calabozo char(5);
declare contadorcalabozo int;
#Comprobamos el dni del delincuente y lo almacenamos
set dni = (new.dni_delincuente);
#Comprobamos el codigo de calabozo y lo almacenamos
set calabozo = (new.cod_calabozo);
#Comprobamos el numero de delincuentes del calabozo donde lo queremos meter
set contadorcalabozo = (select count(*) from delincuente where cod_calabozo = calabozo);
#Comprobamos si el dni del delincuente existe en la tabla historico_delincuentes
set contador =(SELECT count(*) FROM historico_delincuentes where dni_delincuente = dni);
#Si hay 4 o mas deteneidos en el calabozo selecionado no se puede insertar mas.
if (contadorcalabozo >=4) then
call p_mensaje_error();
#si hay menos de 4 en ese calabozo comprobamos si existe en la base de historicos
#si no existe se inserta con un contador inicializado a 1.
elseif (contadorcalabozo < 4) and (contador = 0)then
set contador = 1;
insert into historico_delincuentes values(dni,contador);
#si existe actualizamos el contador con una detencion mas
elseif(contador!=0) then
set contador = (select NUM_DETENCIONES from historico_delincuentes where dni_delincuente = dni);
set contador = (contador + 1);
update historico_delincuentes
set NUM_DETENCIONES = contador
where dni_delincuente =dni;
end if;
END;
| delimiter ;
#en la llamada al procedimiento es donde me falla, ya sea haciendo una select de una variable o llamando al un procedimiento.
Alguien me puede echar una manilla?