I have an mysql stored procedure where with one input, that works great. Now i need two inputs, but its not working and i cant figure out whats wrong.
我有一个mysql存储过程,其中有一个输入,效果很好。现在我需要两个输入,但它不工作,我无法弄清楚什么是错的。
Here is my store procedure:
这是我的商店程序:
CREATE DEFINER=`multilager`@`localhost` PROCEDURE `lagerbeholdning_alle`(IN `bruker_gruppe` INT, IN `bruker_gruppe2` INT)
BEGIN
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN lagerbeholdning.lok_id = ', lagerbeholdning.lok_id,
' THEN antall END) `', lagerbeholdning.lok_id, '`'))
INTO @sql
FROM lagerbeholdning
INNER JOIN lokasjoner ON lagerbeholdning.lok_id = lokasjoner.lok_id
WHERE bruker_gruppe_ref = bruker_gruppe;
SET @sql = CONCAT('SELECT produkt_id, prod_navn, kat_navn, size_navn, farge_navn, prod_bilde, ', @sql, '
FROM lagerbeholdning
INNER JOIN produkter ON produkt_id = prod_id
INNER JOIN produkt_kategorier on prod_kat_id = kat_id
INNER JOIN produkt_sizes on prod_size_id = size_id
INNER JOIN produkt_farger on prod_farge_id = farge_id
WHERE produkter.prod_bruker_gruppe = bruker_gruppe2
GROUP BY produkt_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
If i call the procedure:
如果我打电话给程序:
CALL lagerbeholdning_alle(3,3)
I get the following error:
我收到以下错误:
Error: Unknown column 'bruker_gruppe2' in 'where clause'
How can i use the bruker_gruppe2 parameter in the last where clause?
如何在最后一个where子句中使用bruker_gruppe2参数?
1 个解决方案
#1
1
CONCAT
will treat it as normal text and will pass it to query without replacing with value.
CONCAT会将其视为普通文本,并将其传递给查询而不替换值。
SET @sql = CONCAT('SELECT produkt_id, prod_navn, kat_navn, size_navn, farge_navn, prod_bilde, ', @sql, '
FROM lagerbeholdning
INNER JOIN produkter ON produkt_id = prod_id
INNER JOIN produkt_kategorier on prod_kat_id = kat_id
INNER JOIN produkt_sizes on prod_size_id = size_id
INNER JOIN produkt_farger on prod_farge_id = farge_id
WHERE produkter.prod_bruker_gruppe = ', bruker_gruppe2, '
GROUP BY produkt_id');
Now it should be replaced correctly.
现在它应该被正确替换。
#1
1
CONCAT
will treat it as normal text and will pass it to query without replacing with value.
CONCAT会将其视为普通文本,并将其传递给查询而不替换值。
SET @sql = CONCAT('SELECT produkt_id, prod_navn, kat_navn, size_navn, farge_navn, prod_bilde, ', @sql, '
FROM lagerbeholdning
INNER JOIN produkter ON produkt_id = prod_id
INNER JOIN produkt_kategorier on prod_kat_id = kat_id
INNER JOIN produkt_sizes on prod_size_id = size_id
INNER JOIN produkt_farger on prod_farge_id = farge_id
WHERE produkter.prod_bruker_gruppe = ', bruker_gruppe2, '
GROUP BY produkt_id');
Now it should be replaced correctly.
现在它应该被正确替换。