Хранимая процедура: исключение при попытке получить параметр OUT в nanodbc - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь получить параметр OUT из хранимой процедуры, но получаю исключение. Хранимая процедура работает правильно при запуске из консоли MySQL Workbench.

Это демонстрационная процедура. В моей исходной процедуре я вставляю запись в таблицу и извлекаю состояние SQL (char (5)), чтобы проверить, была ли запись успешно вставлена.

Окружающая среда

nanodbc version: 2.13.0
DBMS name/version: MySQL 5.7
OS and Compiler: Windows 10 Professional 64-bits, Visual C++ 15.9.11
CMake settings:

Exception

[2019-04-22 12:26:24.091] [error] d:\libraries\nanodbc\nanodbc\nanodbc.cpp:1683: HY00: [MySQL][ODBC 8.0(a) Driver][mysqld-5.7.25-log]OUT or INOUT argument 1 for routine seimens_plc.test_procedure is not a variable or NEW pseudo-variable in BEFORE trigger

Минимальный рабочий пример

#include "pch.h"
#include <array>
#include <iostream>
#include <nanodbc/nanodbc.h>
#include <spdlog/spdlog.h>

#pragma comment(lib, "nanodbc.lib")

int main()
{
    try 
       {
        int result;
        nanodbc::string dns = "PLC_Interface";
        nanodbc::string user_name = "root";
        nanodbc::string password = "tantra";
        nanodbc::connection conn(dns, user_name, password);
        nanodbc::statement stmt;
        stmt.prepare(conn, "{CALL test_procedure(?);}");
        stmt.bind(0, &result, nanodbc::statement::PARAM_OUT);
        stmt.execute();
        std::cout << result;
        conn.disconnect();
    }
    catch (const std::exception& ex)
    {
        spdlog::error(ex.what());
    }
}

Хранимая процедура

DROP procedure IF EXISTS `test_procedure`;

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_procedure`(OUT a INT)
BEGIN
    set a = 10;
END$$

DELIMITER ;
...