簡體   English   中英

MariaDB,在C ++程序中執行存儲過程時語法錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM