我在这里有.net 4.0 c#,IBatisNet和CSLA框架的企业项目.
ORA-01084: invalid argument in OCI call当在包中调用insert proc时,其中一个项目作业失败了.返回的错误消息最多是神秘的,存储过程有83个输入参数,不受名称约束(感谢IBatis).
什么是好奇:我有一套记录可以说Order和OrderItems.Order有28个订单商品.作业必须通过创建另一个Order并复制所有OrderItems记录来更新订单.新订单商品按ParentOrderItemId字段引用旧订单商品,这也是Orders将要续订的选择条件.
当我运行它第一次处理吹上OrderItemId: 12345有ORA-01084错误.但是当我下次重新运行时,它会成功处理OrderItemId: 12345.然后爆炸了OrderItemId: 12444.然后我重新运行并OrderItemId: 12444正确处理等等.
我已经传递了DbParameters的日志,它们在两种情况下都是相同的.
我有oci客户端跟踪,但它也没用.
我已经设置了数据库层的登录,到目前为止它没有给我什么.
任何想法如何追踪这些类型的错误?
我想这么多年过去了,我需要提供一个答案。
该问题根源于 Oracle .Net 驱动程序。我们将 Qty 字段定义为 INT。由于内部架构的原因,数量可能为负数或空。95% 的情况下数量是正整数(应该是),但有时由于调整和其他因素,它可能为空或负数。
所以最后我追踪到你如何将记录放入数据库的顺序:
数量 1 数量 0 数量 null 数量 -1
工作正常。
但在这种情况下:
数量 null 数量 1 数量 -1
将在“-1”值上显示 OCI 无效参数。
我在 Oracle 上创建了一个票证,并将其发送给我们的产品团队进行修复。从那时起我就继续前进,所以不太确定它是否以及何时修复。