Строковое значение в процедуре concat

Я знаю, что мои вопросы звучат глупо, но я не могу запустить свой код из-за этой проблемы, вся моя процедура верна, моя единственная проблема заключается в том, что я не могу использовать синтаксис, содержащий строку, которая:

УСТАНОВИТЬ @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 22.11.2018 14:48

@ bato3 Хороший улов.

Tim Biegeleisen 22.11.2018 14:48

ИЛИ ' WHERE i.active=?' и SET @a = 'T'; EXECUTE stmt USING @a;

bato3 22.11.2018 14:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Другие вопросы по теме