[Portugal] trigger que actualize apenas registos novos

Pedro Costa pedrocostaarma sapo.pt
Segunda-Feira, 14 de Novembro de 2011 - 06:50:27 EST


Jorge,

Obrigado por ajudar.

Eu quero que sempre que insiramos novos registos na tabela elementos 
este update dispare:

UPDATE elementos SET n_rua = (SELECT n_rua FROM ruas ORDER BY 
ST_Distance(ruas.the_geom, elementos.the_geom) ASC LIMIT 1)

O update é sobre a mesma tabela. Como formulo a função?

obrigado

Com os melhores cumprimentos,

Pedro Costa
Geógrafo
Especializado em Sistemas de Informação Geográfica e Ordenamento do Território



Em 14-11-2011 11:46, Jorge Penedo escreveu:
>
>
> No dia 14 de Novembro de 2011 11:44, Jorge Penedo 
> <jorge.penedo  gmail.com <mailto:jorge.penedo  gmail.com>> escreveu:
>
>     O after / acção só é disparado após  a ocurrência. Por exemplo ao
>     inserir numa tabela, o trigger só dispara depois dos dados estarem
>     armazenados.
>     Já no before, o trigger dispara antes dos dados estarem guardados.
>     Se percebi quer fazer um insert numa tabela, e aos regsitos novos
>     pretende fazer uma actualização noutra tabela é isso?
>     por exemplo, se tiver uma tabela de nome testes, e sempre que
>     ocorra uma inserção  quer
>     que essa mesma informação seja inserida na tabela trecebe.
>     deve criar uma função para trigger, do género;
>     "
>
>     CREATE OR REPLACE FUNCTION insert_testes()
>
>     RETURNS trigger AS
>
>     $BODY$
>
>     begin
>
>     insert into trecebe (id_novo,nome)
>
>     values (new.id <http://new.id/>, new.nome);
>
>     delete from testes where id = new.id <http://new.id/>;
>
>     return NULL;
>
>     end
>
>     $BODY$
>
>     LANGUAGE 'plpgsql' VOLATILE
>
>     COST 100;
>
>     ALTER FUNCTION insert_testes() OWNER TO postgres;
>
>      "
>
>     e um trigger do tipo:
>
>     "
>
>     CREATE TRIGGER altera_tabela
>
>     AFTER INSERT
>
>     ON testes
>
>     FOR EACH ROW
>
>     EXECUTE PROCEDURE insert_testes();
>
>     "
>     Notas: na função existe o prefixo new que se refer aos valores
>     inseridos.
>     Caso fosse uma acção em tivesse alterado dados ( update ou delete)
>     teria a possibilidade
>     de gerir os novos valores "new" e oa antigos "old".
>     Para criar estas funções e trigger pode recorrer ao pgadmin, onde
>     é um pouco mais intuitivo.
>     Agora se pretende inserir um registo e fazer um update de seguida,
>     ao mesmo registo, das duas uma
>     ou ao fazer o insert insere logo os dados na totalidade, ou na
>     função do trigger inclui as
>     clausulas de actualização.
>     exemplo de update:
>
>      update tabela set campo = novo_valor where id = new.id
>     <http://new.id>
>
>
>
>     No dia 14 de Novembro de 2011 11:28, Pedro Costa
>     <pedrocostaarma  sapo.pt <mailto:pedrocostaarma  sapo.pt>> escreveu:
>
>         postgres, então para actualizar apenas os novos tenho de
>         utilizar o update e o before?
>
>         Obrigado pela ajuda
>
>         Com os melhores cumprimentos,
>
>         Pedro Costa
>         Geógrafo
>         Especializado em Sistemas de Informação Geográfica e Ordenamento do Território
>
>
>
>         Em 14-11-2011 11:18, Jorge Penedo escreveu:
>>         Quando se define um trigger  é indicado o evento 
>>         after/before insert/delete/update
>>         o que pretende é algo do tipo
>>         after insert ou before insert
>>         onde é possível detectar todos os registo novos, inseridos
>>         numa tabela
>>         como não me indicou se está a trabalhar com sqlserver,
>>         postgres, oracle ou outro SGBD não poderei
>>         ser mais especifico.
>>         Qual o SGBD  que está  a usar?
>>         Cumprimentos
>>         Jorge Penedo
>>
>>
>>         No dia 14 de Novembro de 2011 11:05, Pedro Costa
>>         <pedrocostaarma  sapo.pt <mailto:pedrocostaarma  sapo.pt>>
>>         escreveu:
>>
>>             Pessoal alguém podia ajudar a formular um trigger que
>>             dispare quando inserimos novos registos numa tabela?
>>             Queria que executasse um update mas apenas nos registos
>>             novos inseridos no momento, não em todos.
>>             Alguém pode ajudar?
>>
>>             Obrigado
>>
>>             -- 
>>             Com os melhores cumprimentos,
>>
>>             Pedro Costa
>>
>>
>>             _______________________________________________
>>             Portugal mailing list
>>             Portugal  lists.osgeo.org <mailto:Portugal  lists.osgeo.org>
>>             http://lists.osgeo.org/mailman/listinfo/portugal
>>
>>
>>
>>
>>         _______________________________________________
>>         Portugal mailing list
>>         Portugal  lists.osgeo.org  <mailto:Portugal  lists.osgeo.org>
>>         http://lists.osgeo.org/mailman/listinfo/portugal
>
>         _______________________________________________
>         Portugal mailing list
>         Portugal  lists.osgeo.org <mailto:Portugal  lists.osgeo.org>
>         http://lists.osgeo.org/mailman/listinfo/portugal
>
>
>
>
>
> _______________________________________________
> Portugal mailing list
> Portugal  lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/portugal
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: http://lists.osgeo.org/pipermail/portugal/attachments/20111114/ea3c107e/attachment.html


Mais informações acerca da lista Portugal