Ele está after insert e funciona, muito obrigado.
só é pena o bug do qgis
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 13:54, Jorge Penedo escreveu:
a indicação new é valida para todos os campos da tabela
o prefixo new, e refrente ao novo valor atribuido ao campo
o old, é o valor que estava anteriormente.
se tem uma chave que é gerada de forma automática, sugiro que o
trigger seja after insert
No dia 14 de Novembro de 2011 13:19, Pedro Costa
<[email protected] <mailto:[email protected]>> escreveu:
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
<[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] <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