ORA-64219:遇到无效的LOB定位器。

问题描述 投票:0回答:1

我们从oracle 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 组件。我也不知道哪里出了问题。

有趣的是,当我试图用Powerhell的 Oracle.ManagedDataAccess.dll我使用类似的代码没有问题。

c# oracle devart
1个回答
0
投票

请升级到dotConnect for 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();
© www.soinside.com 2019 - 2024. All rights reserved.