Я пытаюсь получить параметр 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 ;