我有很多参数的表:
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”
您能帮我解决此错误消息吗?
答案 0 :(得分:2)
您是否尝试使用单引号将Param
调用该过程?像这样:
call pumpparameters.procReadParam('A12A', 'Pump1', 'DL cons')
答案 1 :(得分:0)
如果要在过程中动态使用列,则可以准备并执行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
部分,因为您没有将其作为参数传递因此您必须进行一些修改才能使其按您的意愿工作