Re: [pgbr-geral] duvida com trigger

2015-02-18 Por tôpico Matheus de Oliveira
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

2015-02-18 Por tôpico Fabrízio de Royes Mello
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

2015-02-18 Por tôpico Douglas Fabiano Specht
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

2015-02-18 Por tôpico Douglas Fabiano Specht
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

2015-02-18 Por tôpico Fabrízio de Royes Mello
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

2015-02-18 Por tôpico Douglas Fabiano Specht
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

2007-09-01 Por tôpico Roberto Baselio Lopes
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-09-01 Por tôpico Leandro DUTRA
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-09-01 Por tôpico Leandro DUTRA
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