Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal.
Criei uma trigger que quando a tabela X tem o campo status alterado, a trigger altera um outro campo da proria tabela X:
CREATE TRIGGER set_paid AFTER UPDATE ON tabela_X
FOR EACH ROW
BEGIN
IF NEW.status = 'C' THEN
UPDATE tabela_X set paid = '1' where id=NEW.id limit 1;
IF NEW.status <> 'C' THEN
UPDATE tabela_X set paid = '0' where id=NEW.id limit 1;
END;
Porem quando executo um update na tabela mudando o campo status o mysql me retorna isso:
Mensagens do MySQL : Documentação
#1442 - Can't update table 'tabela_X' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Desculpe, mas não entendi o que você falou.
Eu não tinha nenhuma tregger, porisso usei o CREATE, acredito eu que se você não tem nada e quer criar não posso usar o ALTER, não usei o alter pois não queria alterar a trigger. Em questão a tradução eu entendi porem a mensagem de erro achei meio confusa, pelo que entendi, ja existe alguma coisa com o mesmo nome sei la eu...
Então, quando você executou da primeira vez e deu erro ele conseguiu criar a TRIGGER
Agora você ta executando de novo, está dando esse erro pq já está criada.
Entendi, mas acho que expressei mal, esse erro acontece quando eu altero um registro na tabela, ai acho que ele tenta executar a triger e da esse erro...
você poderia resumir este código
CREATE TRIGGER set_paid AFTER UPDATE ON tabela_X
FOR EACH ROW
BEGIN
IF NEW.status = 'C' THEN
Os muitos erros de SQL podem ser corrigidos por apenas entender o erro que se é apresentado.
Você consegue traduzir isto: ??
>
Não é possível atualizar a tabela 'tabela_X' em função armazenada pois já está declarada... ou armazenada.
Isto é Você já criou. Toda vez que você for fazer outra alteração, você não usa mais o CREATE, e sim o ALTER.
Tente isso:
ALTER TRIGGER set_paid AFTER UPDATE ON tabela_X
FOR EACH ROW
BEGIN
IF NEW.status = 'C' THEN
Se der erro posta ae.