Tag: clob

如何使用带有ODP(Oracle.DataAccess)的>> prepared query <<更新CLOB字段中的数据?

我正在尝试执行准备好的SQL查询,该查询更新Oracle 10g数据库(10.2.0.1)中的CLOB字段。 如果我从SQL Developer内部执行以下查询并提供占位符的值,则没有问题。 但是,如果我通过OracleCommand (Oracle.DataAccess.dll,版本1.102.0.1(我认为),.NET Framework 3.5)执行它,我会收到以下错误消息。 请注意,我们不使用默认的oracle客户端,因为我们需要批量插入。 不幸的是,给定的ODP版本和.NET Framework版本是一项艰难的要求,我们可能不会改变它。 查询: UPDATE master_table SET description = :description, modification_notes = :modification_notes WHERE master_id = :master_id; 错误: ORA-00932:不一致的数据类型:预期 – 获得CLOB 进一步的信息: 参数分配如下: var param_description = new OracleParameter(“:description”, OracleDbType.Clob); param_description.Value = “Test”; 我尝试过以下的事情: 将to_clob()插入SQL查询 将Oracle.DataAccess.Types.OracleClob对象分配给参数。 我也找到了以下描述,但我真的希望能够保留准备好的查询。 如何使用C#在Oracle中插入CLOB字段 是否可以通过准备好的查询来完成此操作? 我附上了一个产生错误的完整示例。 DESCRIPTION和MODIFICATION_NOTES是数据库中CLOB类型的两列。 输入数据: 连接: OracleConnection到数据库 master_id:要过滤的主键 码: 免责声明:我手动输入以下示例,可能存在实际代码中没有的错误 var […]

为什么我在此CLOB字段的GetOrdinal函数中获得OutOfRangeexception?

这是我的代码示例。 字段FUNCTION_SCRIPT是我的表IS_FUNCTION中的CLOB字段(唯一的CLOB字段) public void ReadFunction(string FName, out string fContent) { OracleCommand command = _connection.CreateCommand(); OracleTransaction transaction = _connection.BeginTransaction(); command.Transaction = transaction; command.CommandText = “SELECT TO_CLOB(TO_NCLOB(FUNCTION_SCRIPT)) FROM IS_FUNCTION where FNAME=:fName “; command.Parameters.Add(“FName”, OracleType.NVarChar).Value = FName; OracleDataReader odr = command.ExecuteReader(); int temp = odr.GetOrdinal(“FUNCTION_SCRIPT”); OracleLob myLob = odr.GetOracleLob(temp); fContent = (String)myLob.Value; odr.close(); } 当执行temp = odr.GetOrdinal(“FUNCTION_SCRIPT”)语句时,我得到一个超出范围的exception。 不明白为什么? […]

使用大型CLOB从C#调用存储过程的问题

我不是第一个遇到这些问题的人,并会在下面列出一些参考文章,但我仍在寻找合适的解决方案。 我需要从C#Web服务调用存储过程(Oracle 10g数据库)。 Web服务器安装了Oracle 9i客户端,我使用的是Microsofts System.Data.OracleClient 。 该过程将XML作为CLOB。 当XML超过4000字节 (这可能是正常的用例)时,我偶然发现了以下错误: ORA-01460 – 要求执行未实现或不合理的转换 我发现了这个 , 这个和这个post。 此外,我发现了一个很有前途的解决方法,它不直接从C#调用存储过程,而是定义了一段匿名PL / SQL代码。 此代码作为OracleCommand运行。 XML嵌入为字符串文字,过程调用从该段代码中完成: private const string LoadXml = “DECLARE ” + ” MyXML CLOB; ” + ” iStatus INTEGER; ” + ” sErrMessage VARCHAR2(2000); ” + “BEGIN ” + ” MyXML := ‘{0}’; ” + ” iStatus […]