• 0
Sign in to follow this  
Sandro2011

(Resolvido) Bloco BEGIN END com com várias instruções n

Question

Saudações galera,

Estou com dificuldades para criar uma sequencia de instruções simples no mysql. Estou tentando fazer um bloco Begin-End em que a primeira parte apaga os registros dentro da tabela e a segunda inclui os novos registros, mas está ocorrendo um erro #1064 que não consigo solucionar.

DELIMITER $$ 
 BEGIN 
   delete from tbl_relacao where cod_produto_final=3;
   insert into tbl_relacao (cod_produto_final,cod_pecas,quantidade,id) values (3,1,505,1),(3,3,5005,1),(3,13,55,1); 
 END$$ 
DELIMITER;

o erro que dá é:

#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 'delete from tbl_relacao where cod_produto_final=3;
' at line 2

Qualquer ajuda é bem vinda!

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Encapsule a instrução em um storage procedure.

O mysql não está sabendo o que fazer com a instrução que você está passando.

Share this post


Link to post
Share on other sites
  • 0

Boa noite Denis, obrigado pela ajuda!

Realmente o uso do Stored Procedure foi a solução.

A possibilidade de administrar melhor os possiveis erros no BD me levaram a tentar blocos de instruções.

Assim como no PHP, eu pensei que era possível simplesmente colocar varias queries dentro de um bloco BEGIN-END.

O problema foi resolvido com o Stored Procedure.

Eu estava precisando fazer umas queries dinâmicas dentro do bloco de instruções, e estava fazendo via PHP, que eu domino mais :P.

Mas eu resolvi o problema também com uso de 'Prepared Statment'.

Meu codigo final ficou assim

delimiter $$
CREATE PROCEDURE atualiza_pecas (IN valores TEXT, IN codigo_parte INT)
   BEGIN 	
	delete from tbl_relacao where cod_produto_final_partes=codigo_parte;
	SET @query = CONCAT('insert into tbl_relacao (cod_produto_final_partes,cod_almox_pecas,quantidade,id) values ',valores);
	PREPARE insere_dados FROM @query;
	EXECUTE insere_dados;
   END$$
delimiter;

Que eu chamo agora atraves de um 'call'

call atualiza_pecas_projeto( '(4,1,70,1), (4,5,200,1), (4,90,70,1) ', 4 )

Com PHP eu colocava uma insert com várias values seguidas. Mas eu tinha de fazer o 'delete' antes e depois o 'insert' dos registros.

Obs. Pode fechar o tópico, o problema foi resolvido.

Edited by Sandro2011

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this