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)
(我要的那个)
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;
感谢帮助
我的存储过程中有一个 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)
(我要的那个)
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;
感谢帮助