Jump to content

Archived

This topic is now archived and is closed to further replies.

Pedroalves

[Resolvido] trigger

Recommended Posts

não estou a conseguir por o trigger a funcionar correctamente

CREATE DEFINER=`root`@`localhost` TRIGGER `gest`.`update` AFTER UPDATE ON gest.produtos FOR EACH ROW
BEGIN
 declare X int;
update produtos set produtos.valor_com_iva=((new.produtos.Preco_sem_iva*X/100)+new.produtos.Preco_sem_iva) where produtos.idprod=new.produtos.idprod;     
END;

o erro neste trigger é quando actualizo um dado na tabela produtos ele não me deixa actualizar

alguem me pode ajudar

Share this post


Link to post
Share on other sites

Creio que :

 

CREATE DEFINER=`root`@`localhost` TRIGGER `gest`.`update` 
AFTER UPDATE ON gest.produtos FOR EACH ROW
BEGIN
 declare X int;
 new.produtos.valor_com_iva=((new.produtos.Preco_sem_iva*X/100)+new.produtos.Preco_sem_iva);     
END;

Basta atribuir o valor á coluna, creio (No Oracle ao menos funciona).

Só não sei de onde o valor da variável X vem.

Share this post


Link to post
Share on other sites

... è uma valor fixo ? esá na tabela inserida ou atualizada ?

Share this post


Link to post
Share on other sites

é um valor fixo

é esta tabela é actualizada

 

da-me sempre este erro

Can't update table 'produtos' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Share this post


Link to post
Share on other sites

Tente assim (com before e sem o update):

 

CREATE DEFINER=`root`@`localhost` TRIGGER `gest`.`update` 
BEFORE UPDATE ON gest.produtos FOR EACH ROW
BEGIN
 declare X int;
 X := 10;
 new.produtos.valor_com_iva=((new.produtos.Preco_sem_iva*X/100)+new.produtos.Preco_sem_iva);     
END;

 

Obs : Em algumas linguagens X tem de ter o mesmo tipo de valor_com_iva e Preco_sem_iva, não sei aqui.

Share this post


Link to post
Share on other sites

no mysql sem o update não funciona

 

e uso o toad

 

o problema é que me esta sempre a aparecer este erro

Can't update table 'produtos' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

a minha tabela no qual eu quero actualizar

CREATE TABLE `produtos` (
  `idprod` int(11) NOT NULL AUTO_INCREMENT,
  `Nome` varchar(11) NOT NULL,
  `descricao` varchar(150) NOT NULL,
  `Quantidade` int(11) NOT NULL,
  `Iva` varchar(11) NOT NULL,
  `Preco_sem_iva` varchar(11) NOT NULL,
  `valor_do_iva` varchar(150) DEFAULT NULL,
  `valor_com_iva` varchar(150) DEFAULT NULL,
  PRIMARY KEY (`idprod`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

Share this post


Link to post
Share on other sites

Acho que nenhum BD permite UPDATE no mesmo registro que etá sendo inserido.

 

No Oracle se resolve isto com uma trigger de BEFORE e atualizando o registro corrente (:NEW><campo>) diretamente.

 

Aquele exemplo que passei no #6 não roda ?

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.