您的位置:首页 > 其它

一个奇怪的查询语句(不知原因)

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'

再次运行原来报错的语句,错误没有了,那么那个表出了什么问题呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐