Драйвер ODBC для Oracle: синтаксическая ошибка или нарушение прав доступа
У меня очень простой 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);
}
}
Когда я запустил его, я получил ошибку ERROR [42000] [Microsoft][ODBC драйвер для Oracle] Синтаксическая ошибка или нарушение доступа, весь стек вызовов
System.Data.Odbc.OdbcException был необработан. Сообщение = ОШИБКА [42000] [Microsoft] [Драйвер ODBC для Oracle] Синтаксическая ошибка или нарушение доступа
Source=msorcl32.dll ErrorCode=-2146232009 StackTrace: в System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) в System.Data.Odbc.OdbcCommand.ExecuteReaderObject, метод поведения объекта, необходимость в объекте ] methodArguments, SQL_API odbcApiMethod) в System.Data.Odbc.OdbcCommand.ExecuteReaderObject(Поведение CommandBehavior, метод String, логический needReader) в System.Data.Odbc.OdbcCommand.ExecuteNonQuery() String для аргумента. в D:\Temp\ConsoleApplication1\ConsoleApplication1\Program.cs: строка 32 в System.AppDomain._nExecuteAssembly(сборка RuntimeAssembly, аргументы String[]) в System.AppDomain.ExecuteAssembly(сборка строк, аргументы Evidence assemblySecurity, строка String[]) Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() в System.Threading.ThreadHelper.ThreadStart_Context(состояние объекта) в System.Threading.ExecutionContext.Run(обратный вызов ExecutionContext executeContext, ContextCallback, Состояние объекта, Boolean ignoreSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart() InnerException:
Сообщение об ошибке здесь очень непонятно, что не так. У кого-нибудь есть подсказка, на что мне обратить внимание?
1 ответ
Я провел другое тестирование и просто изменил тип данных с CLOB на varchar2 в SP, и код работает с тем ограничением, что я могу отправлять в SP размер строки до 31,75 КБ.