追逐“ORA-01084:OCI通话中的无效参数”

时间:2012-02-29 12:38:08

标签: c# .net oracle

我在这里有.net 4.0 c#,IBatisNet和CSLA框架的企业项目。

在程序包中调用insert proc时,其中一个项目作业失败并显示ORA-01084: invalid argument in OCI call。返回的错误消息最多是神秘的,存储过程有83个输入参数,不受名称约束(感谢IBatis)。

什么是好奇:我有一组记录,我们说OrderOrderItemsOrder有28个订单商品。作业必须通过创建另一个Order并复制所有OrderItems记录来续订订单。新订单商品引用了ParentOrderItemId字段之前的旧订单商品,这也是Orders因需要续订的选择条件。

当我第一次运行该过程时,OrderItemId: 12345出现ORA-01084错误。但是当我下次重新运行它时,它会成功处理OrderItemId: 12345。然后在OrderItemId: 12444上爆炸。然后我重新运行并正确处理OrderItemId: 12444,依此类推。

我已经传递了DbParameters的日志,它们在两种情况下都是相同的。

我有oci客户端跟踪,但它也没用。

我已经设置了数据库层的登录,到目前为止它没有给我任何东西。

如何追踪这些类型的错误?

4 个答案:

答案 0 :(得分:4)

我收到了同样的错误消息。在我的情况下,这是因为我将一个空字符串传递给CLOB列。通常我会传递一个大的XML文档,但有时候没有文档。现在,我检查空字符串并写下#34;空"。

答案 1 :(得分:1)

我想这些年来我需要提供一个答案。

问题在于Oracle .Net驱动程序。我们将Qty字段定义为INT。由于内部架构,数量可能为负数或无效。 95%的案例数量是正整数(应该是),但有时由于调整和其他因素,它可能是空的或负的。

所以最后我跟踪了你如何将记录放入数据库的顺序:

数量1 数量0 数量无效 数量-1

正常工作。

但在这种情况下:

数量空 数量1 数量-1

将在“-1”值上使用OCI无效参数。

我在Oracle上创建了一张票,并将其发送给我们的产品团队进行修复。从那以后我继续前进,所以不确定是否以及何时修复。

答案 2 :(得分:0)

对于它的价值,我刚刚遇到了这个错误。我的一个参数中的问题是OracleType不正确。类型设置为NVarchar,数据库列已更改为Clob

尝试显式定义参数OracleType。

OracleParameter(string name, OracleType oracleType)

答案 3 :(得分:-1)

数据类型为nchar(2)的可空列对我来说是个问题。 它不接受null,但在插入数据时需要传入一些值。