ORA-64219: обнаружен недопустимый локатор больших объектов

Мы мигрировали с оракула c12 на c19. И теперь у нас есть простой тестовый пример, который не работает:

//arrange
string data = new string('x', 5000);
var connection = tm.GetConnection();

var createTableCmd = connection.CreateCommand(false);
createTableCmd.Text = "CREATE TABLE xx_temp (id NUMBER, text_long NCLOB, text_short NVARCHAR2(2000))";
createTableCmd.ExecuteNonQuery();

//act
var insertCmd = connection.CreateCommand(false);
insertCmd.Text = "INSERT INTO XX_TEMP (text_long) VALUES (@p1)";
var param = new OracleParameter("@p1", OracleDbType.NClob, data.Length, System.Data.ParameterDirection.Input);
param.Value = data;
insertCmd.Parameters.Add(param);
var insertResult = insertCmd.ExecuteNonQuery();

Последняя строка завершается с ошибкой: ORA-64219: invalid LOB locator encountered

Мы используем компонент Devart.Data.Oracle. И я понятия не имею, что не так.

Что интересно, когда я пытаюсь подключиться к БД из powershell с помощью Oracle.ManagedDataAccess.dll, у меня нет проблем с использованием аналогичного кода.


person Stas BZ    schedule 21.04.2020    source источник
comment
Я знаю, что это не совсем то, о чем вы спрашиваете, но есть ли причина не использовать собственный ODP.NET Oracle?   -  person WSC    schedule 21.04.2020
comment
@WSC проблема в том, что у нас уже есть большой проект, в котором используется devart   -  person Stas BZ    schedule 21.04.2020


Ответы (1)


Пожалуйста, обновитесь до dotConnect для Oracle v9.11.980. Следующий код работает с v9.11.980 и Oracle 19c:

//arrange
string data = new string('x', 5000);
var connection = new OracleConnection();
connection.ConnectionString = @"User Id=****;Password=****;Server=YOUR_HOST/YOUR_SID;Direct=true;";
connection.Open();

var createTableCmd = connection.CreateCommand();
//createTableCmd.CommandText = "DROP TABLE xx_temp";
//createTableCmd.ExecuteNonQuery();
createTableCmd.CommandText = "CREATE TABLE xx_temp (id NUMBER, text_long NCLOB, text_short NVARCHAR2(2000))";
createTableCmd.ExecuteNonQuery();

//act
var insertCmd = connection.CreateCommand();
insertCmd.CommandText = "INSERT INTO XX_TEMP (text_long) VALUES (:p1)";
var param = new OracleParameter("p1", OracleDbType.NClob, data.Length, System.Data.ParameterDirection.Input);
param.Value = data;
insertCmd.Parameters.Add(param);
var insertResult = insertCmd.ExecuteNonQuery();
person Devart    schedule 23.04.2020