oracle 连表查询时的数据类型问题
2011-08-08 11:03
357 查看
今天同事在执行以下sql时报错:ORA-01722: invalid numberORA-01722: invalid number
select a0.*
from BK_FUNCTION a0
join BK_USER_POWER o0 on o0.APPID = a0.ID
where o0.DATAID = '81'
and o0.TYPES = '2'
and a0.VALID = '1';
尝试直接执行
select a0.*
from BK_FUNCTION a0
join BK_USER_POWER o0 on o0.APPID = a0.ID
没有报错
逐条去除查询条件 发现 o0表的字段都去掉后 报错消失
尝试修改 where o0.DATAID = '81'
and o0.TYPES = '2'
为
where o0.DATAID = '81'
and o0.TYPES = '1'
后报错消失
最终发现导致问题的原因是联合查询的On的字段类型不一致 a0.ID是number类型的
修改字段类型后问题消失
弯路主要是在执行不同的查询条件时 有时报错 有时不报
最后结论是 在执行联合查询时 字段类型不一致时 oracle聪明的会隐式转换
这就是 select a0.*
from BK_FUNCTION a0
join BK_USER_POWER o0 on o0.APPID = a0.ID 为什么成功的原因
但当查询条件有结果时 oracle的智商就不足以处理这种情况了 不会去做隐式转换
要么在查询时 加 to_number on o0.APPID = to_number(a0.ID)
或者 最好的方法 修改字段类型 -. -
select a0.*
from BK_FUNCTION a0
join BK_USER_POWER o0 on o0.APPID = a0.ID
where o0.DATAID = '81'
and o0.TYPES = '2'
and a0.VALID = '1';
尝试直接执行
select a0.*
from BK_FUNCTION a0
join BK_USER_POWER o0 on o0.APPID = a0.ID
没有报错
逐条去除查询条件 发现 o0表的字段都去掉后 报错消失
尝试修改 where o0.DATAID = '81'
and o0.TYPES = '2'
为
where o0.DATAID = '81'
and o0.TYPES = '1'
后报错消失
最终发现导致问题的原因是联合查询的On的字段类型不一致 a0.ID是number类型的
修改字段类型后问题消失
弯路主要是在执行不同的查询条件时 有时报错 有时不报
最后结论是 在执行联合查询时 字段类型不一致时 oracle聪明的会隐式转换
这就是 select a0.*
from BK_FUNCTION a0
join BK_USER_POWER o0 on o0.APPID = a0.ID 为什么成功的原因
但当查询条件有结果时 oracle的智商就不足以处理这种情况了 不会去做隐式转换
要么在查询时 加 to_number on o0.APPID = to_number(a0.ID)
或者 最好的方法 修改字段类型 -. -
相关文章推荐
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- oracle查询date类型的数据的时候的小问题
- 解决oracle中lob数据类型查询问题
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- Oracle自定义函数解决数据类型转换出错的问题
- 如何解决oracle分页查询数据重复问题
- 发布NBearLite v1.0.0: 提供强类型查询语法的非ORM数据访问组件 [8/2 更新至v1.0.0.9 beta - 修复NBearLite参考手册某些操作系统打开错误的问题]
- oracle查询当天数据的效率问题
- hibernate查询oracle中Date类型数据设置的一种方法
- 关于Oracle字段类型Date使用mybatis generator自动生成工具出现的查询日期只精确到年月日问题
- TextBox输入控制与Oracle数据类型的问题
- NHibernate中Oracle字段类型Clob数据长度过大问题
- 解决从pl/sql查看oracle的number(19)类型数据为科学计数法的有关问题
- 子查询 oracle输入 set语句 MERGE 事务 数据类型 约束 视图 外键
- SQL C# nvarchar类型转换为int类型 多表查询的问题,查询结果到新表,TXT数据读取到控件和数据库,生成在控件中的数据如何存到TXT文件中
- Oracle表删除大量数据后查询变慢问题
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
- Oracle查询数据表结构(字段,类型,大小,备注)
- oracle创建定时job,job调用存储过程,批量查询,批量修改,自定义数据类型,
- 填坑之路:记一次hive外部表查询hbase的long类型数据出现乱码问题