menu

在路上

我们走入生活,总以为前方会有莫大的幸福在等待着自己.但是蓦然回首,才发现幸福其实就在点点滴滴流逝的时光中

Avatar

关于sql语句的一些思考

昨天遇到一个bug,深圳分公司在导入人员任职情况子集的时候出错。
把他的数据模板要过来,在本地的环境里导入却没有重现错误,导入正常。
在深圳分公司的系统日志里找到了这个错误的原因

java.sql.SQLException: Column (d722) not found in any table in the query (or SLV is undefined).


再去找对应出错的sql语句:

insert into hi_psndoc_deptchg(pk_psndoc_sub,pk_om_duty,recordnum,
pk_jobrank,begindate,pk_psncl,pk_deptdoc,pk_postdoc,
[color=red]pk_corp,[/color]lastflag,pk_psndoc,pk_jobserial ) 
select distinct 'D722AA100000000002RL','0001AA100000000017QW',0,
'0001AA100000000004NC','2004-01-01','0001AA100000000004MY',
'D722AA100000000000SG','D722AA100000000000TM',
[color=red]D722[/color],'Y','D722AA1000000000014K','0001AA100000000004MU' from bd_corp 
where not exists
 (select 1 from hi_psndoc_deptchg where pk_psndoc='D722AA1000000000014K' );

pk_corp对应插入的值是D722,而pk_corp是String类型的,D722应该写成‘D722’。找到了这个原因后问题就比较容易解决了。

但是这个问题为什么到现在才出现呢?
从前写程序的时候没有发现,那么多试点的公司为什么只有深圳公司出现这个问题?
看看代码,都是一样的。
仔细观察,发现只有深圳分公司和它下面的子公司的pk_corp是D开头的,而其他公司的pk_corp都是纯数字的。
在select子查询语句中,数字是不能当作字段名的,于是乎系统自动把1234转换成了‘1234’。
而D722呢,系统就识别成字段名去bd_corp表里找,自然是找不到的 结果肯定是Column (d722) not found

评论已关闭