Oracle 数据精度错误-ORA-01438

转载于:http://blog.sina.com.cn/s/blog_4d6c7dea0101eh0p.html,这位道友写的很好,一目了然

Number的数据声明如下:
表示 作用 说明
Number(p, s) 声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,
Number§ 声明一个整数 相当于Number(p, 0)
Number 声明一个浮点数 其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。
定点数的精度§和刻度(s)遵循以下规则:
? 当一个数的整数部分的长度 > p-s 时,Oracle就会报错
? 当一个数的小数部分的长度 > s 时,Oracle就会舍入。
? 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。
? 当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入
所以,当录入的数据出现其中某一种情况,就有可能报错!如100.003入到Number(6,4)的列中,就会报错,因为100为三位数,3>6-4
ORA-01438: 值大于为此列指定的允许精度

转载于:http://blog.sina.com.cn/s/blog_4d6c7dea0101eh0p.html

### 关于 Oracle 错误 ORA-01555 和 ORA-22924 的原因及解决方案 #### ORA-01555 Snapshot Too Old 错误分析与解决办法 当事务槽被覆盖且无法回滚到足够旧的版本时,Oracle 数据库将返回 ORA-1555 错误[^3]。此错误通常发生在长时间运行查询期间,如果这些查询依赖于一致性读取(Consistent Read),而在此过程中其他并发更新操作已经改变了数据块的内容,则可能导致快照过期。 为了防止此类情况发生: - 增加 `UNDO_RETENTION` 参数值来延长撤销记录保留时间; - 调整应用程序逻辑减少长事务的发生频率; - 使用分区表技术优化大容量数据处理效率; ```sql ALTER SYSTEM SET UNDO_RETENTION=3600 SCOPE=BOTH; ``` 上述命令设置撤销保留时间为一小时。 #### ORA-22924 Numeric Value Out Of Range 错误解析及其对策 ORA-22924 数字超出范围错误表明尝试存储或转换数值超出了目标字段所能容纳的最大限度。这种情形可能源于不同系统间传输数据类型不匹配或是程序内部计算溢出等问题引起。 针对这种情况建议采取如下措施: - 审查涉及运算表达式的合法性并确保其结果不会越界; - 对输入参数做严格校验,在必要时候实施截断或舍入策略; - 修改相应列定义以适应更大规模的数据量级需求; 例如调整某一列为更大的精度: ```sql ALTER TABLE my_table MODIFY (my_column NUMBER(38, 10)); ``` 通过以上方式可有效规避因数值大小不合适引发的相关异常状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值