MySQL 创建过程语法

MySQL CREATE PROCEDURE Syntax

我有这个 table 有很多参数 :

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')

有这样的错误信息:

Error Code: 1054. Unknown column 'A12A' in 'field list'

你能帮我解决这个错误信息吗?

您是否尝试过在单引号中用 Param 调用该过程?像这样: call 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 部分,因为您没有将它作为参数传递

所以你必须做一些调整才能让它像你想要的那样工作