Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2010, 05:44
rubennovich
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
que me falla?

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?