2013-08-24 3 views
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 ; 

ответ

1

использовать локальные переменные
, как показано ниже

DELIMITER $ $ 
CREATE PROCEDURE genericStoredProc(myID BIGINT(20) UNSIGNED, bar VARCHAR(5)) 
BEGIN 
DECLARE bar2 VARCHAR(5); 
SET bar2=bar1 ; 
+0

Я до сих пор есть некоторые проблемы. это означает, что моя реальная проблема заключается в том, чтобы foo был признан «foo» в предложении where. Запрос: CALL genericStoredProc (IDvar, "Foo") Код Ошибка: 1054 Неизвестный столбец 'Foo' в 'где предложение' Время выполнения: 0 сек Время Перевод: 0 сек Общее время: 3,916 сек – Ben

+1

вместо (myID BIGINT (20) UNSIGNED, bar VARCHAR (5)) use (IN myID BIGINT (20) НЕОПРЕДЕЛЕН, IN bar VARCHAR (5)) –

Смежные вопросы