[英]Dynamic parameters in where clause
我的存儲過程中的選擇計數有問題,當我使用兩個動力學參數時,它似乎無法工作。
例如 :
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是一列。
嘗試這個:-
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;
謝謝您的幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.