我的存储过程中有一个选择计数的问题,看起来当我使用两个动态参数时它拒绝工作。
例如:
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)
(我想要的那个)
SELECT COUNT(*)
INTO @var
FROM TMP_TABLE
WHERE @llQuota = @vlQuota;
不能工作(总是返回0)
所以问题可能出在@llQuota参数上,但当我检查它时返回" UDA10"喜欢它。
我也尝试用PREPARE和EXECUTE执行查询,但我遇到同样的问题。
编辑:UDA10是我放在示例中的一个列,它可以是我使用@llQuota而不是直接使用UDA10的原因。问题可能是MySQL不理解@llQuota是一个列。
答案 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;
感谢您的帮助