MySQL创建过程语法

MySQL创建过程语法,mysql,syntax,procedure,Mysql,Syntax,Procedure,我有一张有很多参数的表: 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 = `

我有一张有很多参数的表:

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”


您能帮我了解这个错误消息吗?

您是否尝试过用单引号中的
Param
调用该过程?这样地:
调用pumpparameters.procReadParam('A12A','Pump1','DL cons')

如果要在过程中动态使用列,可以准备并执行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 ;
注:

  • 对于VARCHAR列,应该用单引号括住它们的值,从而在CONCAT中正确地转义它们(使用
    \'
  • 我用
    =
    替换了
    LIKE
    ,因为LIKE在那里没有任何用途
  • 我删除了
    Freq
    部分,因为您没有将其作为参数传递

因此,您必须进行一些调整,使其能够像您希望的那样使用“”,答案是:Param | A12目前它是一个测试表,真正的表将非常大。我需要像“%Pump1%”,因为有许多泵没有Pump1,而是具有相同的参数:类型| MN 0100B、MP 0100B、MQ 0100BNU 2000 N|BJ 0400 B,BG 1300 J。我需要频率,因为同一台泵可以有50、60或90Hz的电机,但参数不同