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

Responder a