关于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 了