Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос с параметрически заданным именем 
V
    Опции темы
IGV
Дата 26.8.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



Имеется база данных. Скажу сразу - она составлена неправильно, но отказаться от неё пока нельзя.

Есть таблица table1 с колонками id_client, sw_ip
Вот например запись от туда:

 id_client       sw_ip
   252          192.168.10.11

В колонке switch_ip содержится запись о том, к какому маршрутизатору привязан клиент.

Для каждого маршрутизатора создана своя отдельная таблица, например для маршрутизатора 192.168.10.11 таблица будет называться sw_1011.
В этой таблице тоже есть поле id_client.

Мне необходимо удалить из базы данных записи о клиенте. Хотелось бы сделать это одним запросом. Хотел попробовать использовать динамический sql, чтобы формировать имя таблицы.

Код

SET @tName = CONCAT('sw_', 
                         REPLACE (
                                 SUBSTRING_INDEX(
                                                  (
                                                    SELECT sw_ip
                                                    FROM table2 AS t
                                                    WHERE t.id_client = '252'
                                                   ),
                                                   '.',
                                                    -2                                                     
                                                 ),
                                  ''                                                  
                                 )
                        );
SET @query = 'DELETE sw_table, SW_CL FROM ? AS sw_table LEFT JOIN SW_CL on SW_CL.id_client=\'252\' WHERE sw_table.ID_CL = \'252\'';
PREPARE stmt1 FROM @query;
EXECUTE stmt1 USING @tName;
DEALLOCATE PREPARE stmt1;


Я пытаюсь сделать следующее:
1. выбрать запись из таблицы table2 с полем id_client равным идентификатору клиента (в примере 252) (на выходе 192.168.10.11);
2. взять подстроку (на выходе 10.11);
3. заменить символ '.' на пустой символ '' (на выходе 1011);
4. осуществить конкатенацию со строкой "sw_" (на выходе sw_1011);
Ну а дальше выполнить этот динамический запрос.

В качестве редактора использую MySQL Query Browser. Весь этот код я вставляю в область текста для запроса.

У меня ошибки.
1) mysql не понимает, как мне кажется функцию Replace, хотя я нашел её в списке String Functions
2) Unknown prepared statement handler stmt1.

Подскажите, что я делаю не так. Может я вообще "не в ту степь пошел"? Как это сделать проще?

P.S.
для того чтобы это написать прочитал на форуме форум. Второй пост.
Версия MySQL сервера 5.1



Это сообщение отредактировал(а) IGV - 27.8.2009, 11:59
PM MAIL ICQ   Вверх
IGV
Дата 28.8.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 1.4.2008

Репутация: нет
Всего: 2



В общем в итоге надо было написать так:
Код

SET @tName = CONCAT('sw_', REPLACE(SUBSTRING_INDEX((SELECT ip_sw FROM SW_CL AS t WHERE t.id_client = '@idClient'), '.', -2), '.', ''));
SET @query = CONCAT('DELETE sw_table, SW_CL FROM ', @tName, ' AS sw_table INNER JOIN SW_CL WHERE sw_table.ID_CL = SW_CL.id_client AND SW_CL.id_client=\'@idClient\'');
PREPARE stmt1 FROM @query;
EXECUTE stmt1;

Помогли решить проблему на этом форуме
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.