Function e trigger

05/02/2004

2

E ai pessoal, blz???

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!!!


Responder

Posts

06/02/2004

Regisgl1

Consulte o site abaixo:

http://www.postgresql.org.br/usuario/index.html

Sugestao: adicione aos seus sites favoritos.

Até.


Responder

07/02/2004

Paulomerino

Amigo... obrigado pela tentativa... só q eu preciso de algo que me esclareça dúvidas sobre [b:d9765e9be2]Triggers[/b:d9765e9be2] e [b:d9765e9be2]Functions[/b:d9765e9be2] no postgresql e não sobre tipos de dados, consultas, manipulação de dados, indices, etc...

Valeu a tentativa, mas não é bem por ai...


Responder
desculpe mas essa foi a unica function que eu encontrei comentada aki nas minhas tá :)



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();


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar