Fórum Problema com DELETE e Triggers #26995
03/12/2008
0
Salve Pessoal,
Estou tentando entender uns exemplos de trigger da SQLMagazine, edição 20, mas está acontecendo algo estranho. A tabela sobre a qual as funções e o trigger estão sendo criados é:
A função de trigger é:
E o trigger é:
O problema é que quando o trigger está ativo eu não consigo apagar uma linha da tabela... Sempre que a apago e atualizo ela ainda está lá...
Alguém tem alguma idéia do que possa ser? Obrigado,
celso
Estou tentando entender uns exemplos de trigger da SQLMagazine, edição 20, mas está acontecendo algo estranho. A tabela sobre a qual as funções e o trigger estão sendo criados é:
CREATE TABLE emp ( n_emp integer, nome_emp varchar(30), cargo varchar(10), chefe integer, data_adm date, sal numeric(10,2), com numeric(10,2), n_dep integer ) WITHOUT OIDS; ALTER TABLE emp ADD CONSTRAINT emp_PK PRIMARY KEY (n_emp);
A função de trigger é:
CREATE OR REPLACE FUNCTION ArgFunc() RETURNS TRIGGER AS ´ DECLARE arg integer; BEGIN arg := TG_ARGV[0]; IF arg = 1 THEN RAISE NOTICE ´´O trigger ArgEx1 chamou a função.´´; ELSE RAISE NOTICE ´´O trigger ArgEx2 chamou a função.´´; END IF; RETURN NEW; END; ´ LANGUAGE plpgsql;
E o trigger é:
CREATE TRIGGER ArgEx1 BEFORE DELETE ON emp FOR EACH ROW EXECUTE PROCEDURE ArgFunc(1);
O problema é que quando o trigger está ativo eu não consigo apagar uma linha da tabela... Sempre que a apago e atualizo ela ainda está lá...
Alguém tem alguma idéia do que possa ser? Obrigado,
celso
Jcfreire
Curtir tópico
+ 0
Responder
Posts
04/12/2008
Jair Bg
Altere sua trigger para: ´FOR EACH ROW para ´STATEMENT´, veja resultado se é o que voce pretende!!
DROP TRIGGER argex1 ON emp;
CREATE TRIGGER ArgEx1
BEFORE DELETE
ON emp FOR EACH STATEMENT
EXECUTE PROCEDURE ArgFunc(1);
DROP TRIGGER argex1 ON emp;
CREATE TRIGGER ArgEx1
BEFORE DELETE
ON emp FOR EACH STATEMENT
EXECUTE PROCEDURE ArgFunc(1);
Responder
Gostei + 0
02/10/2009
Pedroviol
Acredito que seje o Return New;
Se está deletando tem q dar Return old;
Espero ter ajudado;
Se está deletando tem q dar Return old;
Espero ter ajudado;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)