[Portugal] trigger que actualize apenas registos novos

Jorge Penedo jorge.penedo gmail.com
Segunda-Feira, 14 de Novembro de 2011 - 06:44:29 EST


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, new.nome);

            delete from testes where id = 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






No dia 14 de Novembro de 2011 11:28, Pedro Costa
<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>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
>> http://lists.osgeo.org/mailman/listinfo/portugal
>>
>
>
>
> _______________________________________________
> Portugal mailing listPortugal  lists.osgeo.orghttp://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/7e11ab63/attachment.html


Mais informações acerca da lista Portugal