适用于 Oracle 的 ODBC 驱动程序:语法错误或访问冲突

本文关键字:语法 错误 访问冲突 驱动程序 Oracle ODBC 适用于 | 更新日期: 2023-09-27 18:31:27

我有一个非常简单的Oracle SP

CREATE OR REPLACE procedure DEV.SL_CLOB_TEST(numId IN PLS_INTEGER,id IN PLS_INTEGER, strText IN CLOB)
as
begin
    insert into test_table values (numId,id, strText, sysdate, user);
end;

我有一个客户端 .Net 4.0 代码来使用上面的 SP

    static void Main(string[] args)
    {
        string connectionString = "Driver={Microsoft ODBC for Oracle};Server=server;Uid=username;Pwd=password";
        var connection = new OdbcConnection(connectionString);
        connection.Open();
        IDbCommand command = connection.CreateCommand();
        command.CommandText = "{call SL_CLOB_TEST(?,?,?)}";
        command.CommandType = CommandType.StoredProcedure;
        OdbcParameter parameter1 = new OdbcParameter("NUMID", OdbcType.Int);
        parameter1.Value = 123;
        parameter1.Direction = ParameterDirection.Input;
        command.Parameters.Add(parameter1);
        OdbcParameter parameter2 = new OdbcParameter("ID", OdbcType.Int);
        parameter2.Value = 234;
        parameter2.Direction = ParameterDirection.Input;
        command.Parameters.Add(parameter2);
        OdbcParameter parameter3 = new OdbcParameter("STRTEXT", OdbcType.VarChar);
        parameter3.Value = getClob();
        parameter3.Direction = ParameterDirection.Input;
        command.Parameters.Add(parameter3);
        command.ExecuteNonQuery();
    }
    private static string getClob()
    {
        return new string('a', 10);
    }
}

当我运行它时,我收到错误错误 [42000] [Microsoft][Oracle 的 ODBC 驱动程序]语法错误或访问冲突,整个调用堆栈是

System.Data.Odbc.OdbcException is unhandle Message=ERROR [42000] [Microsoft][适用于甲骨文的 ODBC 驱动程序]语法错误或访问冲突
Source=msorcl32.dll ErrorCode=-2146232009 StackTrace: at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为, 字符串方法, 布尔需要读取器, 对象[] 方法参数, SQL_API odbcApiMethod) at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为, 字符串方法, 布尔需要读取器) at System.Data.Odbc.OdbcCommand.ExecuteNonQuery() at ConsoleApplication1.Program.Main(String[] args) in D:''Temp''ConsoleApplication1''ConsoleApplication1''Program.cs:line 32 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在System.Threading.ThreadHelper.ThreadStart_Context(对象状态) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean 忽略同步CTX) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:

这里的错误消息非常不清楚出了什么问题。有人知道我应该调查什么吗?

适用于 Oracle 的 ODBC 驱动程序:语法错误或访问冲突

我做了一些其他测试,只是在 SP 中将数据类型从 CLOB 更改为 varchar2,并且代码工作的限制是我可以向 SP 发送最多 31.75K 的字符串大小。