MySQL 使用游标到 assemble 准备语句时的最后一行质询
MySQL last line challenge when using a cursor to assemble prepared statement
我正在使用游标来构建准备好的语句并且效果很好(实际上比预期的要好)。
但是我无法理解 "last line challenge" 我的想法暂时想打电话给它。
我需要在语句的最后一行添加一个伪造的 SELECT,这样查询就不会以 'semicolon'.
结尾
OPEN cEmployeeSkill;
-- loop through temp table
getLine: LOOP
FETCH cEmployeeSkill INTO vSkill;
IF vFinished = 1 THEN
SET @StatementTemp = CONCAT('MAX(CASE WHEN Skill_id = 0 THEN SkillLevelName END) AS \Dummy\' ');
SET @StatementMain = CONCAT(@StatementMain,@StatementTemp);
LEAVE getLine;
END IF;
-- get the current title of the skill
SET @ColumnTitle = (SELECT SkillName FROM tbl_Skill WHERE Skill_id = vSkill GROUP BY SkillName LIMIT 1);
-- do the pivot thing
SET @StatementTemp = CONCAT('MAX(CASE WHEN Skill_id = ',vSkill,' THEN SkillLevelName END) AS \'',@ColumnTitle,'\', ');
-- add the new line to the statment
SET @StatementMain = CONCAT(@StatementMain,@StatementTemp);
END LOOP getLine;
CLOSE cEmployeeSkill;
关于如何避免添加 'dummy' 列的任何想法?
最后,把最后两个字符去掉,去掉最后一个逗号:
SET @StatementMain = LEFT(@StatementMain, LEN(@StatementMain)-2);
我正在使用游标来构建准备好的语句并且效果很好(实际上比预期的要好)。
但是我无法理解 "last line challenge" 我的想法暂时想打电话给它。
我需要在语句的最后一行添加一个伪造的 SELECT,这样查询就不会以 'semicolon'.
OPEN cEmployeeSkill;
-- loop through temp table
getLine: LOOP
FETCH cEmployeeSkill INTO vSkill;
IF vFinished = 1 THEN
SET @StatementTemp = CONCAT('MAX(CASE WHEN Skill_id = 0 THEN SkillLevelName END) AS \Dummy\' ');
SET @StatementMain = CONCAT(@StatementMain,@StatementTemp);
LEAVE getLine;
END IF;
-- get the current title of the skill
SET @ColumnTitle = (SELECT SkillName FROM tbl_Skill WHERE Skill_id = vSkill GROUP BY SkillName LIMIT 1);
-- do the pivot thing
SET @StatementTemp = CONCAT('MAX(CASE WHEN Skill_id = ',vSkill,' THEN SkillLevelName END) AS \'',@ColumnTitle,'\', ');
-- add the new line to the statment
SET @StatementMain = CONCAT(@StatementMain,@StatementTemp);
END LOOP getLine;
CLOSE cEmployeeSkill;
关于如何避免添加 'dummy' 列的任何想法?
最后,把最后两个字符去掉,去掉最后一个逗号:
SET @StatementMain = LEFT(@StatementMain, LEN(@StatementMain)-2);