mysql - MySQL 过程中 SET 命令出错

标签 mysql sql stored-procedures

我希望从表(数据集)中检索列(本例中为任务)的所有不同值在这种情况下)。任务值将作为我打算使用该过程创建的表的列名称(尽管当前未定义,但仅打印)。但它在行

处给出了错误
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/

相关文章:

mysql - 如何与本地系统 apache 一起运行 docker apache?

php - SQL 语法错误。看起来我想念什么

java - ms access 中查询值和目标字段的数量不相同

sql-server - 编写 CLR 存储过程

php - 如何使用mysql按月获取值的总和

php - 找不到空行

mysql - SQL字符串匹配

MySQL:从文本变量准备的语句不起作用

c# - 多线程环境中的 SQL Server 存储过程

mysql - 如何追踪一个人去某个地方的时间?