【问题标题】:ODBC C++ (Visual Studio 2010) SQLPrepare(.) returns SQL_ERROR when the Oracle 11g PL/SQL stored procedure has BLOB as OUT parameter当 Oracle 11g PL/SQL 存储过程将 BLOB 作为 OUT 参数时,ODBC C++ (Visual Studio 2010) SQLPrepare(.) 返回 SQL_ERROR
【发布时间】:2015-09-19 03:07:15
【问题描述】:

当 BLOB 类型用于 PL/SQL 存储过程 OUT 参数而 VARCHAR2、NUMBER 等时,您是否知道为什么 ODBC SQLPrepare(.) 中的调用会导致 SQLExecute(.) 失败(返回 SQL_ERROR)?作为 OUT 参数可以正常工作吗?从 Oracle (SQL Developer) 中调用带有 BLOB OUT 参数的存储过程可以正常工作。

我的 C++ 代码: sqlReturnCode = SQLPrepare(OracleStatementHandle, (SQLCHAR*)"{call package_one.param_test_proc(?)}", SQL_NTS);

【问题讨论】:

  • 如何绑定对应的缓冲区?我猜你首先调用 SQLBindParamater(...);然后调用 SQLPrepare?如果是,你能告诉我们你是如何绑定 BLOB 参数的吗?我猜这个错误是由不正确的绑定引起的。
  • 我找到了原因(请参阅下面答案部分中的原因)。感谢您关注这个问题! (:

标签: c++ oracle11g odbc parameter-passing blob


【解决方案1】:

我们的一位 DBA 发现了我们正在使用的驱动程序:

https://msdn.microsoft.com/en-us/library/ms713590%28v=vs.85%29.aspx

“重要 此功能将在 Windows 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。而是使用 Oracle 提供的 ODBC 驱动程序。”

有支持说明明确声明它们不支持 CLOB/BLOB 数据类型等: https://msdn.microsoft.com/en-us/library/ms710205%28v=vs.85%29.aspx

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2012-05-12
    • 2020-12-31
    • 2017-01-14
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多