【发布时间】:2018-04-05 02:44:24
【问题描述】:
我正在学习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 Unknown column 'fc_frm_date' in 'field list'
我认为这两个选择查询应该相等但不相等。谁能帮忙解释一下?
非常感谢。
【问题讨论】:
-
第一个
SELECT是一个内嵌SQL 语句,其中嵌入了用户定义的变量和参数。当语句执行时,变量和参数被它们的值替换。第二个是一个字符串,它被转换为带有PREPARE的SQL 语句。准备好的语句没有“传递给”它的参数,因此会发生错误。我不是 mysql 内部的专家,但这可能是因为EXECUTE可以在不同的上下文中。
标签: mysql sql stored-procedures prepared-statement