2014-11-26 5 views
0

Я хочу, чтобы получить все различные значения столбца (Task в данном случае) из таблицы (набора данных в данном случае). Значения задачи будут отображаться как имя столбца для таблицы, которую я намереваюсь создать с помощью этой процедуры (хотя она не определена в настоящее время, а только напечатана). Но это дает ошибку на линииОшибка в команде SET в процедуре MySQL

SET qry = CONCAT("CREATE TABLE ",tblname," (TEAM varchar(20) PRIMARY KEY ,"); 

говоря конец не хватало. Когда я положил конец он говорит точка с запятой отсутствует и наоборот.

DELIMITER // 

CREATE PROCEDURE `createTable` (IN tblName varchar(20)) 
    BEGIN 
     DECLARE task varchar(20) DEFAULT ""; 
    DECLARE exit_loop BOOLEAN; 


    SET qry = CONCAT("CREATE TABLE ",tblname," (TEAM varchar(20) PRIMARY KEY ,"); 

    DECLARE task_curs CURSOR FOR SELECT DISTINCT Task FROM dataset; 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE; 

    OPEN task_curs; 

    my_loop: loop 

     FETCH task_curs into task; 
     qry=CONCAT(qry,task, ' INT DEFAULT 0, '); 

     IF exit_loop THEN 
      CLOSE task_curs; 
      LEAVE my_loop; 
     END IF; 
    END LOOP my_loop; 

    qry=TRIM(TRAILING ',' FROM qry); 
    qry=CONCAT(qry, ');'); 
    SELECT qry; 
END; // 
DELIMITER ; 

Возможно, что-то не так с синтаксисом? Благодаря!

ответ

1

Try:

DELIMITER // 

CREATE PROCEDURE `createTable` (IN tblName varchar(20)) 
    BEGIN 
     DECLARE task varchar(20) DEFAULT ""; 
    DECLARE exit_loop BOOLEAN; 
    DECLARE qry VARCHAR(500); 

    -- SET qry = CONCAT("CREATE TABLE ",tblname," (TEAM varchar(20) PRIMARY KEY ,"); 

    DECLARE task_curs CURSOR FOR SELECT DISTINCT Task FROM dataset; 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE; 

    SET qry = CONCAT("CREATE TABLE ",tblname," (TEAM varchar(20) PRIMARY KEY ,"); 

    OPEN task_curs; 

    my_loop: loop 

     FETCH task_curs into task; 
     -- qry=CONCAT(qry,task, ' INT DEFAULT 0, '); 
     -- SET qry=CONCAT(qry,task, ' INT DEFAULT 0, '); 

     IF exit_loop THEN 
      CLOSE task_curs; 
      LEAVE my_loop; 
     END IF; 

     SET qry=CONCAT(qry,task, ' INT DEFAULT 0, '); 

    END LOOP my_loop; 

    -- qry=TRIM(TRAILING ',' FROM qry); 
    SET qry=TRIM(TRAILING ',' FROM qry); 

    -- qry=CONCAT(qry, ');'); 
    SET qry=CONCAT(qry, ');'); 

    SELECT qry; 
END; // 
DELIMITER ; 
+1

Спасибо. Это сработало для меня. Хотя здесь, похоже, есть новая проблема. Предполагая, что я получаю A, B, C как разные значения из столбца Task, результирующий запрос - это что-то вроде CREATE TABLE TableTemp (TEAM varchar (20) PRIMARY KEY, A INT DEFAULT 0, B INT DEFAULT 0, C INT DEFAULT 0, C INT DEFAULT 0); Он добавляет последнее значение дважды. Что может быть проблемой? – GvanJoic

+0

@GvanJoic: см. Обновленный код. – wchiquito

+0

Да, это работает. Большое спасибо. :) – GvanJoic

Смежные вопросы