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
部分,因为您没有将它作为参数传递
所以你必须做一些调整才能让它像你想要的那样工作
我有这个 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
部分,因为您没有将它作为参数传递
所以你必须做一些调整才能让它像你想要的那样工作