我有这个表有很多参数:
idPumpParam|Type |Version|A10A|A11A|A12A|A13A|A14A|...
1 |Pump1 |DL cons|1 |32 |45 |6 |67 |...
2 |Pump2 |DL var |2 |65 |8 |37 |43 |...
为了使用我的自动化搜索参数,我想在MySQL Workbench 5.7中创建一个过程:
CREATE DEFINER = `root`@`localhost`
PROCEDURE `procReadParam`(IN Param VARCHAR(20),
IN TypePpe VARCHAR(20),
IN Version VARCHAR(20))
BEGIN
SELECT Param FROM pumpparameters.pumpparam
WHERE Type1 LIKE TypePpe AND Version=Version AND Frequence=Freq;
END
程序很好,没有错误信息。
我在MySQL Workbench中测试过程:
call pumpparameters.procReadParam(A12A, 'Pump1', 'DL cons')
有以下错误消息:
错误代码:1054。“字段列表”中的未知列'A12A'
你能帮我解决这个错误信息吗?
如果要在过程中动态使用列,则可以准备并执行SQL字符串语句
像这样的东西:
DELIMITER //
CREATE DEFINER = `root`@`localhost`
PROCEDURE `procReadParam`(IN Param VARCHAR(20),
IN TypePpe VARCHAR(20),
IN Version VARCHAR(20))
BEGIN
SET @sql = CONCAT('SELECT ', Param, ' FROM pumpparameters.pumpparam WHERE Type1 = \'', TypePpe ,' AND Version =\'',Version,'\'');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
笔记:
\'
)LIKE
取代了=
,因为LIKE没有任何目的。Freq
部分,因为你没有将它作为参数传递所以你必须做一些调整才能让它像你想要的那样工作
你试过用单引号用Param
调用这个程序吗?像这样:call pumpparameters.procReadParam('A12A', 'Pump1', 'DL cons')