2015-08-07 4 views
0

ХПА Определения:MySQL выбрать из динамической базы данных и таблицы запроса

DECLARE dbName varchar(255); 
DECLARE tableName varchar(255); 
DECLARE fullPath varchar(255); 
DECLARE conditions varchar(255); 

SET dbName = idbname; 
SET tableName = itablename; 
SET fullPath = CONCAT("'",dbName,"'",'.',"'",tableName,"'"); 
SET checkExists = 0; 

Я создаю хранимую процедуру, где имя_бд и имя_таблицы динамичны, однако я застрял на выборе аспекта этого запроса.

Я пытаюсь вернуть _test. user со значениями, переданными в хранимую процедуру.

SELECT count(*) INTO checkExists FROM `_test`.`user` WHERE id = 1; 

Однако эта линия выдает ошибку

SELECT count(*) INTO checkExists FROM fullPath WHERE id = 1; 

Ошибка:

Procedure execution failed 
1146 - Table 'dbname.fullpath' doesn't exist 

Я также попытался CONCAT(), как этот

set conditions = CONCAT('SELECT count(*) INTO ',checkExists, ' FROM ', fullPath, ' WHERE id=', 1); 

Хау ver, я не могу понять, как использовать это при выборе? Помощь приветствуется.

+1

Посмотрите, поможет ли это: http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html – PaulF

+0

Да, подготовленные операторы будут работать с моим сообщением concat. Я пытаюсь выяснить, почему я не могу сделать это, обычно выбирая, передавая переменную. Или, если это возможно – Haris

ответ

0

Мне нравится делать эти изменения, используя replace(). Что-то вроде этого:

replace(replace('SELECT count(*) INTO checkExists FROM `<dbname>`.`<tname>` WHERE id = 1', 
       '<tname>', v_tablename 
       ), '<dbname>', v_databasename 
     ) 

Вы также можете использовать v_fullpath где-то. Я не совсем уверен, какой запрос вы хотите создать.

Я не уверен, почему у вас есть переменная, называемая checkExists, когда она представляется целевым файлом. Однако я бы предположил, что вы добавите все свои локальные переменные, чтобы отличить их от имен столбцов.

+0

Я сравниваю строки в двух таблицах, если строка существует в таблице 2, которая отсутствует в таблице 1, я бы выполнил удаление, существующее на двух отдельных dbs. Кроме того, я не понимаю, как использовать замену в этом экземпляре? – Haris

+0

@ Харри. , , Вы должны задать другой вопрос с правильным описанием того, что вы делаете. Этот вопрос, безусловно, касается одной таблицы и множества переменных. Изменение вопроса после ответа является невежливым, поскольку оно может аннулировать ответ. –

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