0
У меня есть хранимая процедура, которая выбирает IDvars на основе значения «foo» и присваивает им имена переменных, которые включают foo. Я могу сделать это с помощью:минимизация параметров в хранимой процедуре MySQL
CALL db0.genericStoredProc(IDvar, "foo", "'foo'");
В идеале, я бы хотел написать
CALL db0.genericStoredProc(IDvar, "foo");
Как использовать бар, так что я не нужен параметр BAR2? Вот часть моей хранимой процедуры.
DROP PROCEDURE IF EXISTS genericStoredProc;
DELIMITER $ $
CREATE PROCEDURE genericStoredProc(myID BIGINT(20) UNSIGNED, bar VARCHAR(5), bar2 VARCHAR(5))
BEGIN
SET @s = CONCAT('SELECT gt.name, gt.junk, gt.junkName, count(gt.idvar) as id_count,
SUM(CASE
WHEN ot.offset <0 THEN 1
ELSE 0
END) AS ', bar,'_id_count
FROM genericTable gt
LEFT JOIN otherTable ot ON gt.IDvar2 = ot.IDvar
WHERE (gt.idvar = ', IDvar, ') AND (ot.prmtr = ', bar2, ')
GROUP BY gt.idvar');
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
Я до сих пор есть некоторые проблемы. это означает, что моя реальная проблема заключается в том, чтобы foo был признан «foo» в предложении where. Запрос: CALL genericStoredProc (IDvar, "Foo") Код Ошибка: 1054 Неизвестный столбец 'Foo' в 'где предложение' Время выполнения: 0 сек Время Перевод: 0 сек Общее время: 3,916 сек – Ben
вместо (myID BIGINT (20) UNSIGNED, bar VARCHAR (5)) use (IN myID BIGINT (20) НЕОПРЕДЕЛЕН, IN bar VARCHAR (5)) –