Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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;

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.