[Portugal] trigger que actualize apenas registos novos
Pedro Costa
pedrocostaarma sapo.pt
Segunda-Feira, 14 de Novembro de 2011 - 08:19:06 EST
Caro Jorge é obrigatório na função o campo new ser o id?Pode ser outro?
É que assim sempre que insiro um registo novo a tabela do qgis fica com
tudo a null...é um bug...
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 12:07, Jorge Penedo escreveu:
> Creio que deve existir uma chave primária na tabela elementos, para o
> caso consideremos como ID
> ficaria algo do genero
>
> CREATE OR REPLACE FUNCTION insert_elementos()
>
> RETURNS trigger AS
>
> $BODY$
>
> begin
>
> UPDATE elementos SET n_rua = (SELECT n_rua FROM ruas ORDER BY
> ST_Distance(ruas.the_geom, elementos.the_geom) ASC LIMIT 1)
> where id = new.id <http://new.id>;
> return NULL;
>
> end
>
> $BODY$
>
> LANGUAGE 'plpgsql' VOLATILE
>
> COST 100;
>
> ALTER FUNCTION insert_elementos() OWNER TO postgres;
>
> CREATE TRIGGER altera_tabela
>
> AFTER INSERT
>
> ON elementos
>
> FOR EACH ROW
>
> EXECUTE PROCEDURE insert_elementos();
>
> neste exemplo o utilizador da base de dados é o "postgres". o que
> deverá ser substituido pelo ower da tabela
> se for esse o caso
>
> No dia 14 de Novembro de 2011 11:50, Pedro Costa
> <pedrocostaarma sapo.pt <mailto:pedrocostaarma sapo.pt>> escreveu:
>
> 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 <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/94aee241/attachment-0001.html
Mais informações acerca da lista Portugal