where 子句中的动态参数

Dynamic parameters in where clause

我的存储过程中有一个 select 计数问题,看起来当我使用两个动态参数时它拒绝工作。

例如:

1.

SELECT COUNT(*)
INTO @var
FROM TMP_TABLE
WHERE UDA10 = 3;

完美运行

2.

SELECT COUNT(*)
INTO @var
FROM TMP_TABLE
WHERE UDA10 = @vlQuota

也可以

3.

    SELECT COUNT(*)
    INTO @var
    FROM TMP_TABLE
    WHERE @llQuota = 3;   

不起作用(总是 return 0)

  1. (我要的那个)

    SELECT COUNT(*)
    INTO @var
    FROM TMP_TABLE
    WHERE @llQuota = @vlQuota;
    

不起作用(总是 return 0)

所以问题可能出在 @llQuota 参数上,但是当我检查它时 returns "UDA10" 就像它应该的那样。

我也尝试使用 PREPARE 和 EXECUTE 执行查询,但我遇到了同样的问题。

编辑:UDA10 是我放在示例中的一列,它可以是我使用 @llQuota 而不是直接使用 UDA10 的任何原因。问题可能是MySQL没有理解@llQuota是一个列。

试试这个:-

SELECT COUNT(*)
INTO @var
FROM TMP_TABLE
WHERE if('UDA10' = @llQuota, UDA10 = @vlQuota, 1);

在您的查询中,@llQuota 是一个字符串,因此不能将其视为一列。它表现为一个字符串。

这样使用:

create PROCEDURE proc_count()
BEGIN
    declare var int(20)default 0;

    select count(*) as count into var from table1;

select var;

END

调用程序:

call proc_count();

找到解决方案,我不得不使用 PREPARE 和 EXECUTE,但我还必须连接参数:

例如:

SET @qry = CONCAT('SELECT count(*) into @nbExtract 
FROM TMP_EXTRACTION WHERE ', @llQuota, '= ', @vlQuota, ';');
PREPARE statement FROM @qry;
EXECUTE statement;    

感谢帮助