ORA-01722 无效数字出错原因以及以及分析总结

转发自:ORACLE-023:令人烦恼的 ora-01722 无效数字

主要原因如下:

1、对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作;
2、两个类型不匹配的值进行比较操作(例如,“=”);
3、to_number函数中的值,非数字的,比如,to_number('a')肯定是不行的,to_number('12306')则是正常的。
要避免这些问题,要做到在写sql语句时就好认真处理好不同类型的问题。
比如如果要比较的话,同时都用to_number强制转换(to_number(字段a) = to_number(字段b)),或者同时转换为字符串类型(字段a||'' = 字段b||'',都连接一个空字符串使之变成字符串类型)

今天在做Oracle语句测试联系的时候遇到了Oracle错误: ORA-01722 无效数字错误,经查询资料,发现是如下问题:

本人的SQL语句

select e.ename from emp e
inner join dept d
on e.deptno=d.deptno
inner join city c
on d.loc = c.cid
where cname='NEW YORK';

然而未发觉 dept表中的loc 是 varchar2类型,city表中的 cid是 number类型导致报错,现改正方案是将 cid使用 to_char函数转化为字符类型,便可以使用“=”做连接操作了
修改如下

select e.ename from emp e
inner join dept d
on e.deptno=d.deptno
inner join city c
on d.loc = to_char(c.cid)
where cname='NEW YORK';

运行结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值