[英]MariaDB, Syntax error when executing stored procedure in c++ program
首先,感謝您閱讀此問題並為我的英語不好而道歉。
我現在正在將數據庫從SQL Server轉換為MariaDB。 我安裝了MySQL ODBC驅動程序並添加了“系統DSN”。 (C:\\ Windows \\ SysWOW64 \\ odbcad32.exe)
在執行存儲過程時出現了問題。
當我在SQLyog中創建過程時,沒有錯誤,執行也運行良好。 但是,當我在C ++應用程序中執行存儲過程時,會發生語法錯誤。
數據庫[MySQL] [ODBC 5.3(w)驅動程序] [mysqld-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 ;
我真的不知道怎么回事。 請幫我。
解決了! 原因是執行功能。 當我的團隊使用SQL Server時,EXECUTION函數的字符串組合為EXEC,沒有括號。 (眾所周知,SQL Server通過“ EXEC sp_name arg1 arg2 ...”執行過程)
但是MySQL(以及MariaDB)的過程執行語法是'CALL sp_name(arg1,arg2 ...)。 我們的程序員更改了EXECTION函數的字符串組合。 和? 它完美地工作!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.