douyi2798
douyi2798
2013-10-13 21:44

MySQL存储过程不使用多个参数

已采纳

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.

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?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • douou5933 douou5933 8年前

    CONCAT will treat it as normal text and will pass it to query without replacing with value.

    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.

    点赞 评论 复制链接分享