莫名其妙的异常003:关联查询中的01722-无效数字

系统中的表,一般使用主外键都比较多。主外键的定义和标准用法大家都很熟悉,只是实际使用时很少规范使用。比如有时主键是number类型,外键就定义成了varchar2类型。因为oracle中支持number类型的数字和varchar2类型的数字自动转换,所以不会出现什么问题。
比如,表test1
ID,name
11,aa
12,bb
13,cc
表test2,TID字段varchar2类型,
ID,TID,name
1,11,ff
2,12,gg
3,13,hh
如下join查询,没什么问题
select t1.ID AS ID1,t2.ID AS ID2,t1.NAME AS NAME1,t2.NAME AS NAME2 from test1 t1
join test2 t2
on t1.id = t2.TID
where
1=1;
但是,再给test2加一行,
ID,TID,name
1,11,ff
2,12,gg
3,13,hh
4,tt,ii
再执行上述查询,就会提示 ORA-01722:无效的数字。因为TID字段实际的内容的值已经不是数字了。无法自动转换了。
所以当使用主外键表关联时,如果没法做到主外键的字段类型最好保持一致,不然随着数据量的增多,业务的复杂成都增加,会出现更多莫名其妙的问题。

猜你喜欢

转载自blog.csdn.net/yysyangyangyangshan/article/details/79404783