2012-07-16 20 views
21

Non capisco cosa c'è di sbagliato con questo scriptMYSQL dichiarazione delle variabili

BEGIN 
DECLARE crs INT DEFAULT 0; 

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

voglio inserire 10 valori nel continente tavolo, ma c'è un errore alla seconda linea.

risposta

30

MySQL non supporta l'esecuzione di blocchi anonimi di codice di stored procedure.

È necessario creare una stored procedure incluso quel codice e quindi richiamarla.

Inoltre, mancava il punto e virgola alla fine delle istruzioni di inserimento. L'ho risolto. Probabilmente vorresti usare concat() invece di + per generare i nomi, ma lascerò a te questa modifica.

Creare la procedura:

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 ; 

avvalersi della procedura:

CALL insert_ten_rows(); 
39

dichiarare variabile in MySQL con @ e assegnare con :=

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

Riferimenti

+0

'BEGIN DECLARE CRS INT; SET @crs = 0; WHILE crs <10 DO INSERISCI INTO \ 'continent \' (\ 'nome \') VALORI ('cont' + @ crs) SET @crs = crs + 1; FINE MENTRE; END; 'non funziona in questo modo sia – NiCU

+0

assegnare con': = ' – diEcho

+5

l'errore che ottengo dice che: # 1064 - Hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a "DECLARE @crs INT" – NiCU

Problemi correlati