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 <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
<[email protected] <mailto:[email protected]>> 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
<[email protected] <mailto:[email protected]>> 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
<[email protected] <mailto:[email protected]>>
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
<[email protected] <mailto:[email protected]>>
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
[email protected]
<mailto:[email protected]>
http://lists.osgeo.org/mailman/listinfo/portugal
_______________________________________________
Portugal mailing list
[email protected] <mailto:[email protected]>
http://lists.osgeo.org/mailman/listinfo/portugal
_______________________________________________
Portugal mailing list
[email protected] <mailto:[email protected]>
http://lists.osgeo.org/mailman/listinfo/portugal
_______________________________________________
Portugal mailing list
[email protected] <mailto:[email protected]>
http://lists.osgeo.org/mailman/listinfo/portugal
_______________________________________________
Portugal mailing list
[email protected] <mailto:[email protected]>
http://lists.osgeo.org/mailman/listinfo/portugal
_______________________________________________
Portugal mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/portugal
_______________________________________________
Portugal mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/portugal