一个奇怪的查询语句(不知原因)
2014-04-09 11:00
218 查看
作者:iamlaosong
一个查询语句,只是查询条件值的改变,导致查询出错,原因不明,情况如下:
select *
from tb_evt_dlv a, sncn_zd_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date = to_date('2013-3-10','yyyy-mm-dd')
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '230073%'
上面语句可以正常执行,下面这个语句却报错:ORA-03113:通信通道的文件结束
select *
from tb_evt_dlv a, sncn_zd_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date = to_date('2013-3-10','yyyy-mm-dd')
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '23007300%'
两个语句的差别就是机构号字段条件值由‘230073%’改为‘23007300%’,23007300这个机构是存在的,用其他存在的机构或者不存在的机构号都没有问题,就是这个机构号有问题,用‘2300730%’(少一个0)也会报同样的错误,但是长度短一点,比如‘2300%’也可以正常查询,按说‘2300%’的查询结果应该包含‘23007300%’的查询结果,为甚会报错呢?
试验的其他机构比如‘23126700%’就没有问题,但2300开头的很多机构都不行,比如’23007400%‘-’23007800‘都会报错,但是如果这个机构代码不存在则不会报错,比如’23007311%‘就不会报错,只是没有结果而已,去掉任何一个表,只用两个表关联,同样的条件也可以正常查询,真是奇怪。
再次试验了一下,好像2300XX00这样结构的机构号都不行,其它没问题,比如23000115是没问题的。
继续试验发现:
下面这个报错:
select *
from tb_evt_dlv a, sncn_zd_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date = to_date('2014-3-10','yyyy-mm-dd')
and a.dlv_sts_code='I'
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '23007300%'
但下面这个正常:
select *
from tb_evt_dlv a,tb_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date =to_date('2014-3-10','yyyy-mm-dd')
and a.dlv_sts_code='I'
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '23007300%'
差别在于用了两个不同的机构表,两个表结构完全相同,tb_jg的记录3000多条,包含了sncn_zd_jg表中的记录(200多条),似乎问题出在表sncn_zd_jg上,但单独对这个表查询是没有问题的,将这个表改名,重建这个表:
create
table sncn_zd_jg as select * from tb_jg t where t.zdbz='1'
再次运行原来报错的语句,错误没有了,那么那个表出了什么问题呢?
一个查询语句,只是查询条件值的改变,导致查询出错,原因不明,情况如下:
select *
from tb_evt_dlv a, sncn_zd_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date = to_date('2013-3-10','yyyy-mm-dd')
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '230073%'
上面语句可以正常执行,下面这个语句却报错:ORA-03113:通信通道的文件结束
select *
from tb_evt_dlv a, sncn_zd_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date = to_date('2013-3-10','yyyy-mm-dd')
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '23007300%'
两个语句的差别就是机构号字段条件值由‘230073%’改为‘23007300%’,23007300这个机构是存在的,用其他存在的机构或者不存在的机构号都没有问题,就是这个机构号有问题,用‘2300730%’(少一个0)也会报同样的错误,但是长度短一点,比如‘2300%’也可以正常查询,按说‘2300%’的查询结果应该包含‘23007300%’的查询结果,为甚会报错呢?
试验的其他机构比如‘23126700%’就没有问题,但2300开头的很多机构都不行,比如’23007400%‘-’23007800‘都会报错,但是如果这个机构代码不存在则不会报错,比如’23007311%‘就不会报错,只是没有结果而已,去掉任何一个表,只用两个表关联,同样的条件也可以正常查询,真是奇怪。
再次试验了一下,好像2300XX00这样结构的机构号都不行,其它没问题,比如23000115是没问题的。
继续试验发现:
下面这个报错:
select *
from tb_evt_dlv a, sncn_zd_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date = to_date('2014-3-10','yyyy-mm-dd')
and a.dlv_sts_code='I'
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '23007300%'
但下面这个正常:
select *
from tb_evt_dlv a,tb_jg b,tb_evt_mail_clct c
where a.mail_num=c.mail_num
and a.dlv_date =to_date('2014-3-10','yyyy-mm-dd')
and a.dlv_sts_code='I'
and a.dlv_bureau_org_code =b.zj_code
and a.dlv_bureau_org_code like '23007300%'
差别在于用了两个不同的机构表,两个表结构完全相同,tb_jg的记录3000多条,包含了sncn_zd_jg表中的记录(200多条),似乎问题出在表sncn_zd_jg上,但单独对这个表查询是没有问题的,将这个表改名,重建这个表:
create
table sncn_zd_jg as select * from tb_jg t where t.zdbz='1'
再次运行原来报错的语句,错误没有了,那么那个表出了什么问题呢?
相关文章推荐
- 使用一个T-SQL语句批量查询数据表占用空间及其行数
- ACCESS中查询语句:查询所得数据另存到一个指定目录下的文件夹里,并新建新的文件
- oracle 实现多字段匹配一个关键字查询语句
- 转载:如何写个SQL语句查询一个字段里是否有重复记录如果有只读取其中一条记录
- 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
- 当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序
- 又一个通用分页存储过程,支持表别名,多表联合查询SQL语句
- 多个值以,分隔存储在一个字段精确匹配查询 sql语句
- iBatis多次调用同一查询语句查询时报“列名无效”无列名的错误原因及解决方法
- SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
- 使用一个T-SQL语句批量查询数据表占用空间及其行数
- 一个查询语句各个部分的执行顺序
- contentProvider实现groupby查询数据比如要用实现这么一个sql语句:SELEC
- sql语句中要查询一个字符串字段不为空怎么写
- 一个查询每天时间段的SQL 语句
- 一个用户SQL慢查询分析,原因及优化
- sql 将一个表中查询语句插入另一张表中的某一列
- [转]一个用户SQL慢查询分析,原因及优化
- 求助:关于一个查询的SQL语句,请高人指点如何实现,谢谢!
- Oracle 如何查询一个对象的完整定义语句 .