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

Responder a