2012-07-16 13 views
21

que no entiendo lo que está mal con este scriptMYSQL declarar variables

BEGIN 
DECLARE crs INT DEFAULT 0; 

WHILE crs < 10 DO 
INSERT INTO `continent`(`name`) VALUES ('cont'+crs) 
SET crs = crs + 1; 
END WHILE; 
END; 

lo quiero para insertar 10 valores en el continente mesa, pero hay un error en la segunda línea.

Respuesta

30

MySQL no admite la ejecución de bloques anónimos de código de procedimiento almacenado.

Debe crear un procedimiento almacenado que incluya ese código y luego invocarlo.

Además, le faltaba el punto y coma al final de sus instrucciones de inserción. Lo arreglé También es probable que desee utilizar concat() en lugar de + para generar los nombres, pero le dejaré ese cambio.

Cree el procedimiento:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS insert_ten_rows $$ 

CREATE PROCEDURE insert_ten_rows() 
    BEGIN 
     DECLARE crs INT DEFAULT 0; 

     WHILE crs < 10 DO 
      INSERT INTO `continent`(`name`) VALUES ('cont'+crs); 
      SET crs = crs + 1; 
     END WHILE; 
    END $$ 

DELIMITER ; 

invocar el procedimiento:

CALL insert_ten_rows(); 
39

declaran variable en MySQL con @ y asignar con :=

SET @crs = 0; // declaration 
--here your query 
@crs := @crs+1 // assignment 

Referencias

+0

'COMIENZO DECLARE INT CRS; SET @crs = 0; WHILE crs <10 DO INSERT INTO \ 'continent \' (\ 'name \') VALUES ('cont' + @ crs) SET @crs = crs + 1; FINALIZAR MIENTRAS; END; 'no funciona de esta manera tampoco – NiCU

+0

asignar con': = ' – diEcho

+5

el error que recibo dice que: # 1064 - Usted tiene un error en su sintaxis de SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'DECLARE @crs INT' – NiCU

Cuestiones relacionadas