where子句中的动态参数

时间:2016-08-09 09:23:45

标签: mysql sql stored-procedures query-parameters

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

例如:

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;   

不能工作(总是返回0)

  1. (我想要的那个)

    SELECT COUNT(*)
    INTO @var
    FROM TMP_TABLE
    WHERE @llQuota = @vlQuota;
    
  2. 不能工作(总是返回0)

    所以问题可能出在@llQuota参数上,但当我检查它时返回" UDA10"喜欢它。

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

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

3 个答案:

答案 0 :(得分:0)

试试这个: -

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

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

答案 1 :(得分:0)

使用这种方式:

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();

答案 2 :(得分:0)

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

前:

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

感谢您的帮助