Как указать префикс базы данных для процедуры MySQL?

Статус
В этой теме нельзя размещать новые ответы.

Extalionez

Клоун
Заблокирован
Регистрация
21 Авг 2008
Сообщения
368
Реакции
191
  • Автор темы
  • Заблокирован
  • #1
Здравствуйте! Есть примерно следующий код
Код:
DELIMITER $$
 
CREATE PROCEDURE `mydb`.`myProcedure` (IN dbPrefix VARCHAR(10), IN Id INT(11))
BEGIN
DECLARE peoples VARCHAR(28) DEFAULT CONCAT(dbPrefix, 'peoples');
SELECT  * FROM peoples WHERE `id` = Id;
END
Но он, сволочь, почему-то берёт имя базы данных, для FROM, не из локальной переменной, указанной тут
Код:
DECLARE peoples VARCHAR(28) DEFAULT CONCAT(dbPrefix, 'peoples');
,а просто что ему указали
Код:
FROM peoples
.
У меня уже голова болит над этим думать. В общем просто подскажите как в процедуре сделать FROM из базы данных, префикс для которой должен передаваться в качестве параметра.:confused:
:thenks::thenks::thenks:
P.S.: Либо как экранировать ( в этом коде
Код:
FROM CONCAT(dbPrefix, peoples)
, потому что эта сволочь на неё жалуется. Типа не может быть в запросе FROM этого (

Решил по совету Для просмотра ссылки Войди или Зарегистрируйся с помощью Для просмотра ссылки Войди или Зарегистрируйся.
 
Кинь код с правильным запросом и в FAQ топ.
 
  • Автор темы
  • Заблокирован
  • #3
Кинь код с правильным запросом и в FAQ топ.
Для данного конкретного примера - всё очень просто. нужно лишь не запутаться в конкатенации.
Код:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
 
CREATE PROCEDURE `myProcedure` (IN dbPrefix VARCHAR(10), IN Id INT(11))
BEGIN
SET @my_query:=CONCAT("SELECT * FROM `",dbPrefix,"peoples` WHERE id = ",Id);
PREPARE my_query FROM @my_query;
EXECUTE my_query;
END
Если я конечно сам не запутался. Но сама идея проста и понятна как мне кажется.
Вот только почему-то просто запрос из командной строки выполняется за 0.00 sec, а через CALL 0.04 sec. Правда у меня запрос намного сложней, со множеством INNER'ов и т.п., но всё-же. Правда это уже совершенно другая история.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху