NHibernate/Oracle:如何在 BINARY_DOUBLE 列中插入大数字?
我有一个 C# System.Double 属性,它可能包含类似 1e250 的值:
public virtual double DoubleValue {get; set;}
该属性映射到 BINARY_DOUBLE 列:
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE"/>
Binary_Double 的最大值约为 1.7e+308 (Oracle 文档),但我遇到了异常:
ORA-01426:数字溢出
即使通过 SQL+ 执行查询也会出现问题。我必须使用 TO_BINARY_DOUBLE 强制转换才能使其工作。根据我的理解,提供的数字隐式转换为 NUMBER :我的查询适用于 1e125(NUMBER 的最大值为 1e126),但不适用于 1e250。
我也尝试过这些映射,但没有成功:
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="System.Double"/>
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="binary"/>
使用:Oracle 11G - NHibernate 2.1.0 - .Net 3.5 SP1
感谢您提供的任何指导!
I have a C# System.Double property which may contains value like 1e250 :
public virtual double DoubleValue {get; set;}
The property is mapped to a BINARY_DOUBLE column :
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE"/>
Max value for Binary_Double is about 1.7e+308 (Oracle doc), but I'm getting an exception :
ORA-01426 : numeric overflow
Problem appears even when executing a query through SQL+. I have to use the TO_BINARY_DOUBLE cast to make it work. In my understanding, the number supplied is implicitly converted to a NUMBER : my query work with 1e125 (max for NUMBER is 1e126) but won't work with 1e250.
I've also tried those mappings, without success :
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="System.Double"/>
<property name="DoubleValue" column="VALUE_BINARY_DOUBLE" type="binary"/>
Using : Oracle 11G - NHibernate 2.1.0 - .Net 3.5 SP1
Thanks for any lead you may provide !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是我们正在使用的解决方法,因为我们没有找到任何解决方案:
在 C# 中添加属性:
更改映射以
在 VALUE_BINARY_DOUBLE 列上添加触发器:
这样工作正常!
Here is the workaround we are using, since we didn't find any solution :
Add a property in C# :
Change mapping to
Add a trigger on the VALUE_BINARY_DOUBLE column :
Works fine that way!