Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов MYSQL процедуры из программы на C++, Не выполняется хранимая процедура 
:(
    Опции темы
Zerstroer
Дата 9.11.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.8.2007
Где: Алма-Ата

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



Здравствуйте, уважаемые...
Возникла крайне критичная ошибка. 
Задача: из программы написанной на C++ (под Linux) вызвать хранимую MySQL (Использую MySQL 5.1) процедуру.
Процедура следующая:
Код

DROP PROCEDURE IF EXISTS myprocesskiller2; -
DELIMITER $$
CREATE PROCEDURE myprocesskiller2 ()
  BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE idi INT DEFAULT 0;
    DECLARE cur1 CURSOR FOR SELECT id FROM missileids;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    CREATE TEMPORARY TABLE IF NOT EXISTS missileids SELECT ID from get_missile_id_view;
    OPEN cur1;
    REPEAT
      FETCH cur1 INTO idi;
      set @mslid = null;
      set @mslid = idi;
      set @killstr = concat("kill ", @mslid);
      prepare killproc from @killstr;
      if exists (select id from get_missile_id_view where id = @mslid) then
        execute killproc;
      end if;
      set @killstr = null;
    UNTIL done END REPEAT;
    CLOSE cur1;
    DROP TABLE missileids;
  END$$
DELIMITER ; 

Что она делает: Представление get_missile_id_view возвращает перечень idшников сессий на данном MySQL сервере выбранных по определенному принципу. Дальше, как вы уже могли разобраться по коду - процедура выполняет kill id, то есть грохает последовательно все сессии. 
Процедура при вызове ее из mysql консоли (call myprocesskiller2) работает корректно. Убивает все необходимые сессии.
Далее вызываю ее из программы, вот функция C++:
Код

void killWM2(){
    MYSQL kmysql;
    int z = getNumRows();//количество сессий к базе данных
    cout << "---->" << z << endl;
    if (z>10) {
        if(!mysql_init(&kmysql))
            cout << "can't init DB" << endl;
        if (!mysql_real_connect(&kmysql, "localhost", "root", "123", "mydb", 0, NULL, 0))
            cout << "can't connect DB" << endl;

        char* killquery = "call mydb.myprocesskiller2;";
        if (mysql_real_query(&kmysql, killquery, 29))
            cout << "success" << killquery << endl; else
                cout << "error:(" << endl;
        mysql_real_query(&kmysql, "exit;", 5);
        mysql_close(&kmysql);
    }
}

И вот отсюда, я как ни бьюсь ее я вызвать не могу. Прошу помочь. Помогите отследить и исправить ошибку.


--------------------
In silico
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




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


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

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