2015-07-22 3 views
1

Прежде всего, спасибо за прочитанный этот вопрос и извиниться за мой плохой английский.MariaDB, Ошибка синтаксиса при выполнении хранимой процедуры в программе C++

Я сейчас конвертирую свою БД из SQL-Server в MariaDB. Я установил драйвер ODBC MySQL и добавил «системный DSN». (C: \ Windows \ SysWOW64 \ odbcad32.exe)

Проблема возникла при выполнении хранимой процедуры.

Когда я создал процедуру в SQLyog, не было ошибок, и выполнение также отлично работает. Но когда я выполняю хранимую процедуру в моем симуляторе с ++, возникает ошибка синтаксиса.

базы данных [MySQL] [ODBC 5.3 (ж) Driver] [туздЫ-5.5.5-10.0.20-MariaDB] Вы есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует вашей версии сервера MariaDB, для правильного синтаксиса для использования рядом с 'get_bookProperty?' в строке кода 1

Мой C++ является ...

bool LoadbookProperty::OnExecute(db::IDbProcesser* dbProcesser) 
{ 
    const char* bookName = m_bookName.c_str(); 

    dbProcesser->BindParams(bookName); 
    if (!dbProcesser->Execute("get_bookProperty")) 
     return false; 
    char type[PROPERTY_NAME_LEN]; 
    char value[PROPERTY_VALUE_LEN]; 
    dbProcesser->BindCols(type, value); 
    dbProcesser->FetchWith([this, &type, &value]() 
    { 
     m_properties.push_back(std::make_pair(type, value)); 
    }); 
    return true; 
} 

И моя процедура ...

USE bookInfoDB; 

-- GetbookProperty 

DELIMITER ;; 

CREATE PROCEDURE get_bookProperty (
    IN pi_bookName VARCHAR(32) 
) 
this_proc:BEGIN 

    DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    BEGIN 
     ROLLBACK; 
    END; 

    SELECT bookName, bookPrice FROM bookProperty WHERE bookName = pi_bookName; 

END ;; 

DELIMITER ; 

Я действительно не знаю, в чем дело. Пожалуйста, помогите мне.

+0

Вы пробовали 'call get_bookProperty'? –

+0

Я попытался «вызвать get_bookProperty» в консоли SQLyog и mysql. И оба отлично работают. Вы имеете в виду ... изменить мой код cpp? выполнить вызов? – passion053

ответ

0

Решено! Причиной является функция EXECUTION. Когда моя команда использовала SQL Server, строковая комбинация функции EXECUTION была EXEC и без скобок. (Как вы все знаете, SQL Server выполняет процедуру с помощью «EXEC sp_name arg1 arg2 ...»)

Но синтаксис выполнения MySQL (а также MariaDB) - это «CALL sp_name (arg1, arg2 ...) , Наш программист изменил строчную комбинацию функции EXECTION. А также? Он отлично работает!

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