Re: [pgbr-geral] duvida com trigger
2015-02-18 12:30 GMT-02:00 Douglas Fabiano Specht douglasfabi...@gmail.com : a trigger esta na tabela tabela movimento, e o delete é nela mesmo. se eu colocar no before e dentro de um bloco de transação dar rollback na aplicação a trigger será executada? exemplo begin insert na table X delete movimento(executa a trigger no before) update tabela Y(aqui ocorre um erro e um rollback) Sim, vai ser executada mas o INSERT feito dentro da função de trigger vai naturalmente ser desfeito. De qualquer modo isso não tem relação com o fato de ser AFTER ou BEFORE, o mesmo se aplica à ambos. Concordo com o Fabrízio, você queria ter criado uma trigger do tipo BEFORE. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida com trigger
On 18-02-2015 11:44, Douglas Fabiano Specht wrote: Bom dia Pessoal tenho uma trigger after insert or delete, postgres 9.4, que se for feito um delete eu preciso dar um insert em uma tabela com um join. até ai tudo certo, ocorre que não esta fazendo o insert, pois o select não deve estar retornado dados. if (TG_OP = 'DELETE') then insert into dah.wdados(codempresa, tipo, codigo, titular, nro, chave, celular, dataoperacao) select old.codempresa, 'CO', old.codigo, old.nome, old.acesso, old.chave, c.celular, CURRENT_TIMESTAMP from cadcliente c join movimento h on (c.codigo = h.codigo ) where (h.chave = old.chave and h.codempresa=old.codempresa) ; return old; END IF; alguma dica ou segredo pra poder fazer esse join com where utilizando as colunas OLD? ou como eu poderia salvar o comando com seus valores? estou usando o debbuger do pgadmin, mas os valores dos campos não mostram. Douglas, Em qual tabela está essa trigger?? Lembre-se que o AFTER já considera a operação efetivada, ou seja, se a sua query com JOIN precisa das tuplas excluidas não serão retornadas. Me parece que vc precisa colocar esse seu INSERT no BEFORE DELETE. Att, -- Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida com trigger
Em 18 de fevereiro de 2015 12:18, Fabrízio de Royes Mello fabri...@timbira.com.br escreveu: On 18-02-2015 11:44, Douglas Fabiano Specht wrote: Bom dia Pessoal tenho uma trigger after insert or delete, postgres 9.4, que se for feito um delete eu preciso dar um insert em uma tabela com um join. até ai tudo certo, ocorre que não esta fazendo o insert, pois o select não deve estar retornado dados. if (TG_OP = 'DELETE') then insert into dah.wdados(codempresa, tipo, codigo, titular, nro, chave, celular, dataoperacao) select old.codempresa, 'CO', old.codigo, old.nome, old.acesso, old.chave, c.celular, CURRENT_TIMESTAMP from cadcliente c join movimento h on (c.codigo = h.codigo ) where (h.chave = old.chave and h.codempresa=old.codempresa) ; return old; END IF; alguma dica ou segredo pra poder fazer esse join com where utilizando as colunas OLD? ou como eu poderia salvar o comando com seus valores? estou usando o debbuger do pgadmin, mas os valores dos campos não mostram. Douglas, Em qual tabela está essa trigger?? Lembre-se que o AFTER já considera a operação efetivada, ou seja, se a sua query com JOIN precisa das tuplas excluidas não serão retornadas. Me parece que vc precisa colocar esse seu INSERT no BEFORE DELETE. Att, -- Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Fabrizio, a trigger esta na tabela tabela movimento, e o delete é nela mesmo. se eu colocar no before e dentro de um bloco de transação dar rollback na aplicação a trigger será executada? exemplo begin insert na table X delete movimento(executa a trigger no before) update tabela Y(aqui ocorre um erro e um rollback) -- Douglas Fabiano Specht ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] duvida com trigger
Bom dia Pessoal tenho uma trigger after insert or delete, postgres 9.4, que se for feito um delete eu preciso dar um insert em uma tabela com um join. até ai tudo certo, ocorre que não esta fazendo o insert, pois o select não deve estar retornado dados. if (TG_OP = 'DELETE') then insert into dah.wdados(codempresa, tipo, codigo, titular, nro, chave, celular, dataoperacao) select old.codempresa, 'CO', old.codigo, old.nome, old.acesso, old.chave, c.celular, CURRENT_TIMESTAMP from cadcliente c join movimento h on (c.codigo = h.codigo ) where (h.chave = old.chave and h.codempresa=old.codempresa) ; return old; END IF; alguma dica ou segredo pra poder fazer esse join com where utilizando as colunas OLD? ou como eu poderia salvar o comando com seus valores? estou usando o debbuger do pgadmin, mas os valores dos campos não mostram. -- Douglas Fabiano Specht ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida com trigger
On 18-02-2015 23:02, Douglas Fabiano Specht wrote: obrigado Matheus e Fabrizio, neste caso entao de utilizar o before, e der um rollback, ele vai desfazer o insert mesmo que seja feito em outra tabela correto? É isso ai meu guri... o PostgreSQL é ACID, então lembre-se do A=Atomicidade, ou seja, ou faz tudo ou não faz nada... ;-) E um INSERT/UPDATE/DELETE em uma tabela que tem um gatilho é uma transação só... blz? Att, -- Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida com trigger
Em 18 de fevereiro de 2015 12:34, Matheus de Oliveira matioli.math...@gmail.com escreveu: 2015-02-18 12:30 GMT-02:00 Douglas Fabiano Specht douglasfabi...@gmail.com: a trigger esta na tabela tabela movimento, e o delete é nela mesmo. se eu colocar no before e dentro de um bloco de transação dar rollback na aplicação a trigger será executada? exemplo begin insert na table X delete movimento(executa a trigger no before) update tabela Y(aqui ocorre um erro e um rollback) Sim, vai ser executada mas o INSERT feito dentro da função de trigger vai naturalmente ser desfeito. De qualquer modo isso não tem relação com o fato de ser AFTER ou BEFORE, o mesmo se aplica à ambos. Concordo com o Fabrízio, você queria ter criado uma trigger do tipo BEFORE. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral obrigado Matheus e Fabrizio, neste caso entao de utilizar o before, e der um rollback, ele vai desfazer o insert mesmo que seja feito em outra tabela correto? -- Douglas Fabiano Specht ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] duvida com trigger
Amigos, ao tentar compilar a trigger abaixo o banco me retorna o seguinte erro: ERROR: language plpgslq does not exist SQL state: 42704. O que faço para resolver isso. CREATE TABLE emp ( nome_emp text, salariointeger, ultima_datatimestamp, ultimo_usuario text ); CREATE FUNCTION emp_gatilho() RETURNS trigger AS $emp_gatilho$ BEGIN -- Verificar se foi fornecido o nome e o salário do empregado IF NEW.nome_emp IS NULL THEN RAISE EXCEPTION 'O nome do empregado não pode ser nulo'; END IF; IF NEW.salario IS NULL THEN RAISE EXCEPTION '% não pode ter um salário nulo', NEW.nome_emp; END IF; -- Quem paga para trabalhar? IF NEW.salario 0 THEN RAISE EXCEPTION '% não pode ter um salário negativo', NEW.nome_emp; END IF; -- Registrar quem alterou a folha de pagamento e quando NEW.ultima_data := 'now'; NEW.ultimo_usuario := current_user; RETURN NEW; END; $emp_gatilho$ Language plpgslq; CREATE TRIGGER emp_gatilho BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_gatilho(); INSERT INTO emp (nome_emp, salario) VALUES ('João',1000); -- Roberto Baselio Lopes e-mail / Google Talk: [EMAIL PROTECTED] msn: [EMAIL PROTECTED] Curriculo: http://www2.curriculum.com.br/ucn/rbaselio ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida com trigger
2007/9/1, Roberto Baselio Lopes [EMAIL PROTECTED]: Amigos, ao tentar compilar a trigger abaixo o banco me retorna o seguinte erro: ERROR: language plpgslq does not exist CREATE LANGUAGE, se a memória não me valha. Vide documentação. -- +55 (11) 5685 2219 xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 5686 9607 ICQ/AIM: aim:GoIM?screenname=61287803 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida com trigger
2007/9/1, Roberto Baselio Lopes [EMAIL PROTECTED]: leandro, muito obrigado era isso mesmo que faltava De nada! Mas por favor siga a RFC 1855. -- +55 (11) 5685 2219 xmpp:[EMAIL PROTECTED] +55 (11) 9406 7191 Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 5686 9607 ICQ/AIM: aim:GoIM?screenname=61287803 MSN: msnim:[EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral