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

b0r*_*0rg 5 .net c# oracle

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

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

什么是好奇:我有一套记录可以说OrderOrderItems.Order有28个订单商品.作业必须通过创建另一个Order并复制所有OrderItems记录来更新订单.新订单商品按ParentOrderItemId字段引用旧订单商品,这也是Orders将要续订的选择条件.

当我运行它第一次处理吹上OrderItemId: 12345ORA-01084错误.但是当我下次重新运行时,它会成功处理OrderItemId: 12345.然后爆炸了OrderItemId: 12444.然后我重新运行并OrderItemId: 12444正确处理等等.

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

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

我已经设置了数据库层的登录,到目前为止它没有给我什么.

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

小智 6

我收到了同样的错误消息。就我而言,这是因为我将空字符串传递给 CLOB 列。通常我会传递一个大的 XML 文档,但有时没有文档。现在,我检查空字符串并写入“空”。


b0r*_*0rg 1

我想这么多年过去了,我需要提供一个答案。

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

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

数量 1 数量 0 数量 null 数量 -1

工作正常。

但在这种情况下:

数量 null 数量 1 数量 -1

将在“-1”值上显示 OCI 无效参数。

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