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

问题描述:

我有一个非常简单的Oracle SPOracle ODBC驱动程序:语法错误或访问冲突

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代码来使用上述

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); 
    } 
} 

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

System.Data.Odbc.OdbcException was unhandled Message = ERROR [42000] [Microsoft] [用于Oracle的ODBC驱动程序]语法错误或访问冲突
Source = msorcl32.dll ErrorCode = -2146232009 StackTrace: at System.Data .Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,RETCODE RETCODE) 在System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior 行为,字符串方法,布尔needReader,对象[] methodArguments, SQL_API odbcApiMethod) 在System.Data。 Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior,String method,Boolean needReader) at System.Data.Odbc.OdbcCommand.ExecuteNonQuery() at Conso d:\ Temp \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs中的leApplication1.Program.Main(String [] args):位于System.AppDomain.ExecuteAssembly的System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args) 处的第32行 (String assemblyFile,Evidence assemblySecurity,String [] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext ,ContextCallback回调,对象状态,布尔 ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state) at System.Threading.ThreadHelper.ThreadStart()I nnerException:

这里的错误信息很不清楚什么是错的。任何人都有一些线索,我该看什么?

我做了一些其他测试,并简单地将CLOB中的数据类型更改为SP中的varchar2,并且该代码适用于可以将高达31.75K字符串大小发送给SP的限制。