Function e trigger
05/02/2004
0
Preciso criar uma [b:92003c401d]trigger[/b:92003c401d] que dispare uma [b:92003c401d]função[/b:92003c401d] [i:92003c401d](que também precisa ser criada)[/i:92003c401d] para as tabelas do meu banco na hora em que for feito um insert. Antes de fazer o insert deve ser checado se a chave já existe e se ela existir de ser somado um ao seu valor atual...
porém há algumas particularidades, vamos a elas:
1º - As chaves das tabelas são tipo char;
2º - O valor das chaves possui zeros a esquerda, até completar o tamanho do campo. Ex.: se o tamanho do campo for 5 caracteres o valor para o código ´1´ ficaria ´00001´.
se alguém puder dar uma força... eu agradeço...
valeu... abraços a todos!!!
Paulomerino
Posts
06/02/2004
Regisgl1
http://www.postgresql.org.br/usuario/index.html
Sugestao: adicione aos seus sites favoritos.
Até.
07/02/2004
Paulomerino
Valeu a tentativa, mas não é bem por ai...
18/03/2004
Herbertpimentel
DROP trigger Tcriticapontoentrada on movponto cascade;
DROP function critica_entradaponto();
CREATE OR REPLACE FUNCTION critica_entradaponto() returns opaque AS
´
declare
minimo time;
maximo time;
especialidade integer;
diasemana integer;
eferiado boolean;
begin
select into especialidade fk_especialidade from servidor where id = new.fk_servidor;
select into diasemana date_part(´´dow´´, new.dtponto);
select into minimo (entrada1::time - interval ´´30 minutes´´) from horarioponto where fk_servidor = new.fk_servidor;
select into maximo (entrada1::time + interval ´´15 minutes´´) from horarioponto where fk_servidor = new.fk_servidor;
select into eferiado exists(select dtferiado from feriado where dtferiado = new.dtponto);
-- esquema de depuração
-- if new.horaini2 IS NULL then
-- raise exception ´´diasemana, maximo, minimo, especialidade, eferiado : ¬ ¬ ¬ ¬ ¬´´, diasemana, maximo, minimo, especialidade, eferiado;
-- end if;
-- testa se o dia não é domingo e sabado
if (diasemana <> 0) and (diasemana <> 6) and (not eferiado) then
-- testa se a especialidade do servidor é 19
if (especialidade = 19) then
return new;
else
-- testa se ele ta batendo antes de 30 minutos da hora
if (new.horaini1 < minimo) or (new.horaini1 > maximo) then
raise exception ´´Horario não autorizado para apontamento´´;
return null;
else
return new;
end if; --teste minimo maximo
end if; --if especialidade
else
return new;
end if; --if dia semana
end;
´
language plpgsql;
create trigger Tcriticapontoentrada before insert on movponto
for each row execute procedure critica_entradaponto();
Clique aqui para fazer login e interagir na Comunidade :)