douyi2798 2013-10-13 21:44
浏览 102
已采纳

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 2013-10-13 21:49
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?