我正在使用MySQL和HeidiSQL,我想创建一个存储过程,它接受一个String参数并返回一个表。这是我尝试过的:
CREATE PROCEDURE sp(IN in_param VARCHAR(50))
BEGIN
SELECT * FROM fact_table ft
WHERE ft.param = @in_param
END
我这样打电话:
CALL sp('string_param');
该过程返回一个空表,因为@in_param
在SP内部以某种方式NULL
。
我也喜欢这个:WHERE ft.param = in_param
,但是当我跑它时我得到了一个错误,说SQL Error (1054): Unknown column 'in_param' in 'where clause'
有人能告诉我我做错了什么吗?
PS:我尝试手工创建它,还使用Heidi的Create new - > Stored routine wizard
我终于找到了一个有效的解决方案:
CREATE PROCEDURE sp(IN in_param VARCHAR(50))
BEGIN
DECLARE declared_in_param CHAR(50);
SET declared_in_param = in_param;
SELECT * FROM fact_table ft
WHERE ft.param = declared_in_param;
END
因此,我们的想法是声明并为该IN参数设置一个新变量,并在SELECT语句的WHERE子句中使用该声明的变量。
我没有时间研究为什么这有效,但我会