renatonp 0 Denunciar post Postado Agosto 22, 2013 O que há de errado com esta trigger ? DELIMITER ; CREATE TRIGGER Update_Status AFTER UPDATE ON sales_order FOR EACH ROW BEGIN IF OLD.status <> NEW.status AND (NEW.status = 20 OR NEW.status = 27 OR NEW.status = 30) THEN INSERT INTO order_status(orders,current_status,momento_captura,check_link)VALUES(NEW.partner_order_id,NEW.status,(SELECT CONCAT(DATE(NOW()),' ',TIME(NOW()))),(SELECT content_url FROM book b INNER JOIN sales_order_item soi ON b.id = soi.book_id INNER JOIN sales_order so ON soi.order_id = so.id WHERE so.id = NEW.id)); INSERT INTO order_status(orders,current_status,momento_captura,check_link)VALUES(NEW.partner_order_id,NEW.status,(SELECT CONCAT(DATE(NOW()),' ',TIME(NOW()))),(SELECT cover_url FROM book b INNER JOIN sales_order_item soi ON b.id = soi.book_id INNER JOIN sales_order so ON soi.order_id = so.id WHERE so.id = NEW.id)); END IF; END; Quando eu a executo recebo o erro: Erro consulta SQL: Documentação DELIMITER; CREATE TRIGGER Update_Status AFTER UPDATE ON sales_order FOR EACH ROW BEGIN IF OLD.status <> NEW.status AND ( NEW.status =20 OR NEW.status =27 OR NEW.status =30 ) THEN INSERT INTO order_status( orders, current_status, momento_captura, check_link ) VALUES ( NEW.partner_order_id, NEW.status, ( SELECT CONCAT( DATE( NOW( ) ) , ' ', TIME( NOW( ) ) ) ), ( SELECT content_url FROM book b INNER JOIN sales_order_item soi ON b.id = soi.book_id INNER JOIN sales_order so ON soi.order_id = so.id WHERE so.id = NEW.id ) ); Mensagens do MySQL : Documentação #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7 Compartilhar este post Link para o post Compartilhar em outros sites
Cacilds 18 Denunciar post Postado Agosto 22, 2013 Não sei ao certo o problema, pois dificilmente crio uma TRIGGER e sempre que vou fazer tenho que recorrer a documentação para lembrar, mas acredito que o erro no seu caso é o seu delimitador. Você está utilizando o mesmo ";" Tente assim: DELIMITER // CREATE TRIGGER Update_Status AFTER UPDATE ON sales_order FOR EACH ROW BEGIN IF OLD.status <> NEW.status AND (NEW.status = 20 OR NEW.status = 27 OR NEW.status = 30) THEN INSERT INTO order_status(orders,current_status,momento_captura,check_link) VALUES(NEW.partner_order_id,NEW.status,(SELECT CONCAT(DATE(NOW()),' ',TIME(NOW()))), (SELECT content_url FROM book b INNER JOIN sales_order_item soi ON b.id = soi.book_id INNER JOIN sales_order so ON soi.order_id = so.id WHERE so.id = NEW.id) ); INSERT INTO order_status(orders,current_status,momento_captura,check_link) VALUES(NEW.partner_order_id,NEW.status,(SELECT CONCAT(DATE(NOW()),' ',TIME(NOW()))), (SELECT cover_url FROM book b INNER JOIN sales_order_item soi ON b.id = soi.book_id INNER JOIN sales_order so ON soi.order_id = so.id WHERE so.id = NEW.id) ); END IF; END // E, man, não é querendo ser chato, mas quando pedir ajuda no fórum deixei o código identado e utilizei o recurso de código do fórum. Pode ser que alguém que realmente manje de triggers abriu esse tópico e nem teve o trabalho de tentar lhe ajudar só por causa da forma que está postado. []'s Compartilhar este post Link para o post Compartilhar em outros sites