MySQL CREATE PROCEDURE语法

时间:2019-04-15 14:45:42

标签: 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 = `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”

您能帮我解决此错误消息吗?

2 个答案:

答案 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 ;

注意:

  • 对于VARCHAR列,应将其值用单引号引起来,并在CONCAT中正确地将其转义(使用\'
  • 我将LIKE替换为=,因为那里没有LIKE的目的。
  • 我删除了Freq部分,因为您没有将其作为参数传递

因此您必须进行一些修改才能使其按您的意愿工作