2016-05-04 16 views
0

Ich habe den Tabellennamen "tmp1" mit den Feldern name id und comma. Komma enthält 1,3,2,4,5 Werte mit Text-Datentyp.# 1054 Unbekannte Spalte in der Feldliste in mysql Prozedur

Ich möchte separaten Wert in Schleife in meiner gespeicherten Prozedur. Wie 1 dann 3 dann 2 usw. So, ich wurde unten angegebene Prozedur erstellt.

BEGIN 
DECLARE my_delimiter CHAR(1); 
DECLARE split_comma text; 
DECLARE done INT; 
DECLARE occurance INT; 
DECLARE i INT; 
DECLARE id INT; 
DECLARE sel_query VARCHAR(500); 
DECLARE splitter_cur CURSOR FOR SELECT id,comma from tmp1; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; 

OPEN splitter_cur; 
    splitter_loop:LOOP 
     FETCH splitter_cur INTO id,split_comma; 
     SET occurance = LENGTH(split_comma) - LENGTH(REPLACE(split_comma,',',''))+1; 
     SET my_delimiter=','; 

     IF done = 1 THEN 
      LEAVE splitter_loop; 
     END IF; 

     IF occurance > 0 THEN    
      SET i = 1;    
      WHILE i <= occurance DO 
       SET sel_query = "SELECT SUBSTRING_INDEX(comma,',',i) as abc from tmp1"; 
       SET @sel_query = sel_query; 
       PREPARE sel_query FROM @sel_query;  
       EXECUTE sel_query;     
       SET i = i + 1; 
      END WHILE; 
     END IF; 
     SET occurance = 0; 
    END LOOP; 
CLOSE splitter_cur; 
END; 

Aber wenn ich ausführen dieses Verfahren Fehler tritt auf "MySQL sagte: # 1054 - Unknown column 'i' in 'field list'"

Aber hier ist i eine Variable verwendet Schleife zu drehen.

Gibt es eine Lösung? Bitte helfen Sie mir ... Vielen Dank im Voraus ...

Antwort

0

Sie müssen den Wert der Variablen i in die Abfrage einbetten, was Sie nicht getan haben.

ändern:

SET sel_query = "SELECT SUBSTRING_INDEX(comma,',',i) as abc from tmp1"; 
SET @sel_query = sel_query; 

Um:

SET @sel_query = CONCAT("SELECT SUBSTRING_INDEX(comma,',',", i, ") as abc from tmp1)"; 
Verwandte Themen