Ir para conteúdo

POWERED BY:

Arquivado

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

renatonp

Erro na trigger

Recommended Posts

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

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

×

Informação importante

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