oracle插入值太大,超过限制数的处理ORA-12899,ora-01489
2017-09-25 14:37
417 查看
很多时间,再插入值的时候,会出现超出指定的限制的最大的数。如果允许精度确实可以使用substr或者rpad来限制返回的长度。如果不允许精度确实,则需要
增加字段的精度。
SQL> desc er_test;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
SQL> insert into er_test values ('111111111111111111111111');
insert into er_test values ('111111111111111111111111')
*
ERROR at line 1:
ORA-12899: value too large for column "TEST"."ER_TEST"."NAME" (actual: 24, maximum: 10)
利用substr截取字符串长度
SQL> select length(substr('111111111111111111111111',1,10)) from dual;
LENGTH(SUBSTR('111111111111111111111111',1,10))
-----------------------------------------------
10
利用rpad截取字符串长度
SQL> select length(rpad('111111111111111111111111',10)) from dual;
LENGTH(RPAD('111111111111111111111111',10))
-------------------------------------------
10
SQL> insert into er_test values(substr('111111111111111111111111',1,10));
1 row created.
SQL> insert into er_test values(rpad('111111111111111111111111',10));
1 row created.
如果不允许有字符串的精度确实,则可以加大字段属性长度
SQL> alter table er_test modify name varchar2(50);
Table altered.
注意:只能增加长度,不能减少,否则会报错
SQL> alter table er_test modify name varchar2(5);
alter table er_test modify name varchar2(5)
*
ERROR at line 1:
ORA-01441: cannot decrease column length because some value is too big
增加字段的精度。
SQL> desc er_test;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
SQL> insert into er_test values ('111111111111111111111111');
insert into er_test values ('111111111111111111111111')
*
ERROR at line 1:
ORA-12899: value too large for column "TEST"."ER_TEST"."NAME" (actual: 24, maximum: 10)
利用substr截取字符串长度
SQL> select length(substr('111111111111111111111111',1,10)) from dual;
LENGTH(SUBSTR('111111111111111111111111',1,10))
-----------------------------------------------
10
利用rpad截取字符串长度
SQL> select length(rpad('111111111111111111111111',10)) from dual;
LENGTH(RPAD('111111111111111111111111',10))
-------------------------------------------
10
SQL> insert into er_test values(substr('111111111111111111111111',1,10));
1 row created.
SQL> insert into er_test values(rpad('111111111111111111111111',10));
1 row created.
如果不允许有字符串的精度确实,则可以加大字段属性长度
SQL> alter table er_test modify name varchar2(50);
Table altered.
注意:只能增加长度,不能减少,否则会报错
SQL> alter table er_test modify name varchar2(5);
alter table er_test modify name varchar2(5)
*
ERROR at line 1:
ORA-01441: cannot decrease column length because some value is too big
相关文章推荐
- Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值
- Oracle中Clob类型处理解析(NHibernate long值绑定long列,或者是直接oraclecommand的插入的时候报错都能用,ORA-01461:仅可以插入LONG列的LONG值赋值
- Oracle中Clob类型处理解析:ORA-01461:仅可以插入LONG列的LONG值赋值
- NHibernate 处理 oracle 的long数据类型(ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值)
- 转----Oracle中Clob类型处理解析(NHibernate long值绑定long列,或者是直接oraclecommand的插入的时候报错都可以用,ORA-01461:仅可以插入LONG列的LONG值赋值)
- ORA-00031: session marked for kill 处理Oracle中杀不掉的锁
- oracle 11g ora-00979 bug的处理
- bugzero的安装过程、tomcat与oracle XDB端口冲突的处理(ORA-01041的解决)
- Oracle插入或修改 报ORA-01704: 文字字符串太长
- ora-00031:session marked for kill处理oracle中杀不掉的锁
- Oracle ORA-12899错误的解决方法
- ORACLE IMP ORA-00910 出错处理案例
- [oracle]Ubuntu下ORA-27102及ORA-00845错误处理
- Oracle中变异表(ORA-04091)处理方法两则
- oracle drop用户cascade 无法顺利删除问题处理-ORA-00604和ORA-00942错误
- oracle ORA-14452错误处理例程
- oracle ORA-12899错误的解决方法
- 如何处理登录Oracle时ORA-28000: the account is locked?
- 对于C#中插入数据(Ntext)类型超过大小8000提示处理!
- Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法