为什么in paratemers不能在PREPARE语句中使用

时间:2018-04-05 02:44:25

标签: mysql sql stored-procedures prepared-statement

我正在研究mysql。这是我练习存储过程的代码。

CREATE DEFINER=`raxuser`@`%` PROCEDURE `test`(in fc_frm_date char(5), in fc_to_date char(5))
BEGIN
declare frm_date char(5);
declare to_date char(5);

select fc_frm_date into @frm_date;
select fc_to_date into @to_date;

select distinct @frm_date, @to_date, fc_frm_date, fc_to_date;

set @s = CONCAT('select distinct @frm_date, @to_date, fc_frm_date, fc_to_date;');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
END

当我运行它时,第一个选择查询变得正确,而第二个查询显示错误代码为

  

错误代码:1054'字段列表'中的未知列'fc_frm_date'

我认为两个选择查询应该相同但不是。任何人都可以帮忙解释一下吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

我认为正确的方法(UNTESTED)是:

sudo service mysql restart

答案 1 :(得分:0)

试一试:

CREATE DEFINER=`raxuser`@`%` PROCEDURE `test`(fc_frm_date char(5), fc_to_date char(5))
BEGIN
DECLARE frm_date CHAR(5);
DECLARE to_date CHAR(5);

SELECT fc_frm_date INTO @frm_date;
SELECT fc_to_date INTO @to_date;
SELECT fc_frm_date INTO @fc_frm_date;
SELECT fc_to_date INTO @fc_to_date;

SET @s = 'select distinct @frm_date, @to_date, @fc_frm_date, @fc_to_date';
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SELECT @s;
END