0
我有一个存储过程,它根据'foo'的值选择IDvars并为它们指定包含foo的变量名。我能做到这一点有:最小化MySQL存储过程中的参数
CALL db0.genericStoredProc(IDvar, "foo", "'foo'");
理想情况下,我只想写
CALL db0.genericStoredProc(IDvar, "foo");
如何利用吧,这样我不需要BAR2参数? 这里是我的存储过程的相关部分。
DROP PROCEDURE IF EXISTS genericStoredProc;
DELIMITER $ $
CREATE PROCEDURE genericStoredProc(myID BIGINT(20) UNSIGNED, bar VARCHAR(5), bar2 VARCHAR(5))
BEGIN
SET @s = CONCAT('SELECT gt.name, gt.junk, gt.junkName, count(gt.idvar) as id_count,
SUM(CASE
WHEN ot.offset <0 THEN 1
ELSE 0
END) AS ', bar,'_id_count
FROM genericTable gt
LEFT JOIN otherTable ot ON gt.IDvar2 = ot.IDvar
WHERE (gt.idvar = ', IDvar, ') AND (ot.prmtr = ', bar2, ')
GROUP BY gt.idvar');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
我仍然有一些问题。这意味着我的真正问题是在where子句中将foo识别为“foo”。查询:CALL genericStoredProc(IDvar, “富”) 错误代码:1054 未知列 '富' 在 'where子句' 执行时间:0秒 转换时间:0秒 总时间:3.916秒 – Ben
代替(myID BIGINT(20)UNSIGNED,bar VARCHAR(5))use(IN myID BIGINT(20)UNSIGNED,IN bar VARCHAR(5)) –