【问题标题】:String Value in a concat procedure [closed]concat过程中的字符串值[关闭]
【发布时间】:2018-11-22 13:44:02
【问题描述】:

我知道我的问题听起来很傻,但是由于这个问题我无法运行我的代码,我的所有程序都是正确的,我唯一的问题是我无法使用包含字符串的语法是:

SET @query = CONCAT(@query, ' WHERE i.active=T');

我尝试在撇号和 . 之间使用 +。 ,但是在所有情况下都不起作用...

这是完整的过程

CREATE PROCEDURE stocktakess()

            BEGIN
              DECLARE wid INT;
              DECLARE wname VARCHAR(20);
              DECLARE query TEXT DEFAULT '';
              DECLARE finished INT DEFAULT 0;
              DECLARE whouse_cursor CURSOR FOR SELECT Id, name FROM warehouse WHERE Id IN (1,2,3,5,8);
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
              OPEN whouse_cursor;
              SET @query = 'SELECT i.code,i.code2,i.description';
            get_whouse: LOOP
              FETCH whouse_cursor INTO wid, wname;
              IF finished = 1 THEN 
                LEAVE get_whouse;
              END IF;
              SET @query = CONCAT(@query, ', SUM(CASE WHEN m.warehouseID=', wid, ' THEN COALESCE(m.qtyin, 0) - COALESCE(m.qtyout, 0) ELSE 0 END) AS `', wname, '`');
              END LOOP get_whouse;
              SET @query = CONCAT(@query, ' FROM items i LEFT JOIN itemmovement m ON m.itemid = i.Id');
              SET @query = CONCAT(@query, ' WHERE i.active=T');  
              SET @query = CONCAT(@query, ' GROUP BY i.Id');
              PREPARE stmt FROM @query;
              EXECUTE stmt;
              DEALLOCATE PREPARE stmt;
            END

【问题讨论】:

  • ' WHERE i.active="T"' ?或' WHERE i.active=\'T\''
  • @bato3 不错。
  • ' WHERE i.active=?'SET @a = 'T'; EXECUTE stmt USING @a;

标签: php mysql stored-procedures concat


【解决方案1】:
CREATE PROCEDURE stocktakess()

            BEGIN
              DECLARE wid INT;
              DECLARE wname VARCHAR(20);
              DECLARE query TEXT DEFAULT '';
              DECLARE finished INT DEFAULT 0;
              DECLARE whouse_cursor CURSOR FOR SELECT Id, name FROM warehouse WHERE Id IN (1,2,3,5,8);
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
              OPEN whouse_cursor;
              SET @query = 'SELECT i.code,i.code2,i.description';
            get_whouse: LOOP
              FETCH whouse_cursor INTO wid, wname;
              IF finished = 1 THEN 
                LEAVE get_whouse;
              END IF;
              SET @query = CONCAT(@query, ', SUM(CASE WHEN m.warehouseID=', wid, ' THEN COALESCE(m.qtyin, 0) - COALESCE(m.qtyout, 0) ELSE 0 END) AS `', wname, '`');
              END LOOP get_whouse;
              SET @query = CONCAT(@query, ' FROM items i LEFT JOIN itemmovement m ON m.itemid = i.Id');
              SET @query = CONCAT(@query, ' WHERE i.active=\'T\'');  
              SET @query = CONCAT(@query, ' GROUP BY i.Id');
              PREPARE stmt FROM @query;
              EXECUTE stmt;
              DEALLOCATE PREPARE stmt;
            END

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 2016-07-28
    • 2020-10-10
    • 1970-01-01
    • 2016-12-17
    • 2012-11-27
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    相关资源
    最近更新 更多