Ora01722 无效数字 报错带来的反省

第一步:先创建两个测试表

   第一个表:

create table test_a
(
       id_no number
       ,vchar varchar2(50)
);
   第二个表:

create table test_b
(
       id_no number
       ,vnum number
);
第二步:往表里插入数据

insert into TEST_A (ID_NO, VCHAR)values (1, '奥特曼');

insert into TEST_A (ID_NO, VCHAR)values (2, 'WPS');

insert into TEST_A (ID_NO, VCHAR)values (3, '10');

insert into test_b (ID_NO, VNUM)values (1, 10);

insert into test_b (ID_NO, VNUM)values (2, 11);

insert into test_b (ID_NO, VNUM)values (3, 12);
第三步:写出问题SQL:
select * from test_a
where vchar in (select vnum from test_b)
错误原因
以前这样用没有问题的原因是,以前碰到的字段,虽然都是字符型,但是里面存的确是都是一些数字,
因此在Oracle默认转换为数字的的时候不会问题。但是这个字段里面,不仅有数字,还有中文和英文,都是实打实的
字符串,无法在默认转换的时候被转换成数字,所以就会报错无效数字。由于以前不好的习惯,导致了这个失误。甚至
会觉得自己没有错误,因为以前都是这样写的。

自我反省
不能因为Oracle越来越人性化,而忽视代码书写的严谨性。严格要求自己。
正确的写法:

select * from test_a
where vchar in (select to_char(vnum) from test_b)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值