Trigger max en un cierto mes

yedra
23 de Febrero del 2006
Hola:
Estoy realizando un trigger sobre la tabla visitas (cod_visita, fecha, cod_inmob, cod_cliente)

el trigger tiene q controlar q un mismo cliente no tenga mas de 10 visitas yo lo hago con el siguiente codigo:
CREATE OR REPLACE TRIGGER t_mas_visitas
before insert
on visitas
for each row
declare
n_visita number(3);
mes visitas.FECHA_VISITA%type;
client visitas.cod_cliente%type;
maximo_superado exception;
begin

if inserting then

select count(*) into n_visita
from visitas
where ((client = :new.cod_cliente) and
(months_between(visitas.fecha_visita,:new.fecha_visita)=0));

dbms_output.put_line(to_char(n_visita));

if (n_visita >= 10) then
raise maximo_superado;
end if;

else
raise_application_error(-20500,'No se pudo insertar correctamente');
end if;

exception
when maximo_superado then
dbms_output.put_line('Maximo de visitas al mes superada');
end;
/

No se pq siempre me devuelve 0 el n_visitas y tengo datos introducidos en la tabla.
Si alguien me puede ayudar??
Gracias de antemano

chemian
23 de Febrero del 2006
el select count que haces, te funciona si lo lanzas desde sqlplus sin mas?

eddie_
23 de Febrero del 2006
Ejecuta la consulta en sql*plus
select count(*)
from visitas
where ((client = :new.cod_cliente) and
(months_between(visitas.fecha_visita,:new.fecha_visita)=0));

Quizas la condicion months_between te esta filtrando todos los registros. Al menos comenzaria por ahi.

Saludos

yedra
23 de Febrero del 2006
si lo he probado el select solo en el sql*plus y funciona bien.

yedra
23 de Febrero del 2006
He podido comprobar q lo q falla es el n_visita, en esa variable no me carga el count correctamente. Sabriais decirme de q otra forma podria cargar el count(*)
:D

eddie_
23 de Febrero del 2006
Sospecho que a la variable client no se le esta cargando ningun valor, y por eso el where nunca te da true. Puedes verificarlo?

Saludos

yedra
23 de Febrero del 2006
Si se carga bien.
Ya lo he solucionado con un cursor :D
Gracias.