Fórum Preciso de ajuda com Triggers e Procedures #418637
17/06/2012
0
Olá pessoal!
Tenho uma tabela de código de barras com o nome EAN que possui os seguintes campos (produto, codbarras, sequencia).
Criei uma procedure que ordena o número do campo da sequencia deixando sempre em ordem crescente (1,2,3,4,5,...).
Estou chamando essa procedure em um trigger que criei na tabela EAN, veja:
CREATE DEFINER = root@localhost TRIGGER `ean_after_del_tr` AFTER DELETE ON `ean`
FOR EACH ROW
BEGIN
CALL sp_ordenaean(OLD.produto);
END;
Quando vou fazer o teste, é apresentado a seguinte mensagem: Cant update table ean in stored function/trigger because it is already used by statament which invoked this stored function/trigger.
Mas quando excluo o trigger e faço o teste, sem usar o trigger, a procedure funciona perfeitamente.
Alguém poderia me dar uma ajuda?
Segue abaixo o código da procedure:
CREATE DEFINER = root@localhost PROCEDURE `sp_ordenaean`(
IN prod INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE cnt INT DEFAULT 1;
DECLARE barra char(15);
DECLARE eanprod CURSOR FOR (
select codbarras from ean
where produto = prod order by sequencia
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN eanprod;
REPEAT
FETCH eanprod INTO barra;
if not done then
update ean set sequencia = cnt where produto = prod and codbarras = barra;
set cnt = cnt + 1;
end if;
UNTIL done END REPEAT;
CLOSE eanprod;
END;
Agradeço desde já qualquer ajuda.
Tenho uma tabela de código de barras com o nome EAN que possui os seguintes campos (produto, codbarras, sequencia).
Criei uma procedure que ordena o número do campo da sequencia deixando sempre em ordem crescente (1,2,3,4,5,...).
Estou chamando essa procedure em um trigger que criei na tabela EAN, veja:
CREATE DEFINER = root@localhost TRIGGER `ean_after_del_tr` AFTER DELETE ON `ean`
FOR EACH ROW
BEGIN
CALL sp_ordenaean(OLD.produto);
END;
Quando vou fazer o teste, é apresentado a seguinte mensagem: Cant update table ean in stored function/trigger because it is already used by statament which invoked this stored function/trigger.
Mas quando excluo o trigger e faço o teste, sem usar o trigger, a procedure funciona perfeitamente.
Alguém poderia me dar uma ajuda?
Segue abaixo o código da procedure:
CREATE DEFINER = root@localhost PROCEDURE `sp_ordenaean`(
IN prod INTEGER(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE cnt INT DEFAULT 1;
DECLARE barra char(15);
DECLARE eanprod CURSOR FOR (
select codbarras from ean
where produto = prod order by sequencia
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN eanprod;
REPEAT
FETCH eanprod INTO barra;
if not done then
update ean set sequencia = cnt where produto = prod and codbarras = barra;
set cnt = cnt + 1;
end if;
UNTIL done END REPEAT;
CLOSE eanprod;
END;
Agradeço desde já qualquer ajuda.
Vagner Almeida
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)