[Portugal] trigger que actualize apenas registos novos

Jorge Penedo jorge.penedo gmail.com
Segunda-Feira, 14 de Novembro de 2011 - 07:12:47 EST


Os acessos são dados na databse, no seu limite à tabela.

Os trigger's são sempre disparados quando ocorre a acção. Por defeito é
executado
por todos os utilizadores.

a indicação do onwner não limita a sua execução

No dia 14 de Novembro de 2011 12:09, Pedro Costa
<pedrocostaarma  sapo.pt>escreveu:

> Obrigado Jorge. Só tenho uma dúvida, como faço para permitir vários
> utilizadores?
>
>
>
> 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;
>
>             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>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
>> > 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, 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 de update:
>>>
>>
>>
>>
>>>  update tabela set campo = novo_valor where id = new.id
>>>
>>
>>
>>>
>>>
>>>
>>>
>>> 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
>>>>
>>>>
>>>
>>
>>
>> _______________________________________________
>> 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
>>
>>
>
>
> _______________________________________________
> 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/b9598695/attachment-0001.html


Mais informações acerca da lista Portugal