MySQL CREATE PROCEDURE语法

问题描述 投票:1回答:2

我有这个表有很多参数:

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'

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

mysql syntax procedure
2个回答
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部分,因为你没有将它作为参数传递

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


2
投票

你试过用单引号用Param调用这个程序吗?像这样:call pumpparameters.procReadParam('A12A', 'Pump1', 'DL cons')

© www.soinside.com 2019 - 2024. All rights reserved.