ORA-01722
同一条语句才两个环境,一个可以执行一个提示1722错误


收藏
复制链接
微信扫码分享
在小程序上查看
分享
7条回答
默认
最新
最近刚出现的一种情况,本来在开发环境中sql 都没有问题,结果在测试环境中却报出:ORA-01722: 无效数字 异常。同样的sql 只是环境不同,却一个正常一个报错。也是一顿纠结。后来查出是因为Where 条件后 “列名=数字” 造成的。 表中有一状态列 :state char(1),因为最开始时里面的值都是数字类型 所以sql 中直接写 state = 1. 这样查询没报错是因为 oracle 做了隐式转换。也就是T0_NUMBER(STATE)=1 这时当数据库中出现了如 a b c d 这些字符时,TO_NUMBER 就会触发ORA-01722 错误了。所以以后要做到在写sql语句时就得认真处理好不同类型的问题 用state = ‘1’
评论
有用 0对于SELECT语句,oracle会把字段的数据类型隐式转换为变量的数据类型。
如假设id列的数据类型为varchar2
select * from tab where id=1; -> to_number(id)=1;
但如果id列的数据类型为number,则
select * from tab where id='1';
-> id=to_number('1');
评论
有用 0那为什么同样的语句有时候可以执行有时候不行呢?不行的原因是,为什么不会转换
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

