我希望从表(数据集)中检索列(本例中为任务)的所有不同值在这种情况下)。任务值将作为我打算使用该过程创建的表的列名称(尽管当前未定义,但仅打印)。但它在行
处给出了错误SET qry = CONCAT("CREATE TABLE ",tblname," ( TEAM varchar(20) PRIMARY KEY ," );
缺少结束。当我输入end时,它说分号丢失,反之亦然。
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 ;
语法可能有什么问题?谢谢!
最佳答案
尝试:
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 ;
关于mysql - MySQL 过程中 SET 命令出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152218/