在MySQL存储过程中的WHERE子句中使用IN param

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

我正在使用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

mysql stored-procedures parameter-passing heidisql
1个回答
1
投票

我终于找到了一个有效的解决方案:

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子句中使用该声明的变量。

我没有时间研究为什么这有效,但我会

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