Trigger max en un cierto mes
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
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
el select count que haces, te funciona si lo lanzas desde sqlplus sin mas?
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
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
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
:D
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
Saludos
